2015-11-21 2 views
0

Итак, я пытаюсь объединить два разных файла csv в один, и я это сделал. Два csv-файла имеют учащиеся в школе, которые присутствуют в 1 и отсутствуют в другом.
Мне нужно поставить дату, когда файл был создан в верхней части нового csv, и каждый класс нынешних учеников на новой странице или после трех пустых строк.
Также на каждой новой странице или после каждых трех пробелов я хочу иметь имя или учитель, дату создания файла и оценку.Объедините два csv в один с разрывами страниц в python

import csv 
with open('inschool.csv', encoding="cp437") as f: 
    reader = csv.reader(f) 
    in_school = list(reader) 
with open('notinschool.csv', encoding="cp437") as f: 
    reader = csv.reader(f) 
    not_in_school = list(reader) 

for grade, name, status, hr_teacher in not_in_school: 
    print(grade, name, status, hr_teacher) 
for grade, name, status, hr_teacher in in_school: 
    print(grade, name, status, hr_teacher) 


iFile = open('inschool.csv', encoding="cp437") 
reader = csv.reader(iFile) 
IFILE = open('notinschool.csv', encoding="cp437") 
READER = csv.reader(IFILE) 
oFile = open('combined.csv','wt',encoding="cp437") 
writer = csv.writer(oFile, delimiter='|', quoting=csv.QUOTE_ALL) 

for row in READER: 
    writer.writerow(row) 
    writer.writerow("[]") 
for row in reader: 
    writer.writerow(row) 
    writer.writerow("[]") 

Код, который я пытался за 3 пустых строки были это окончание, но он дал 3 пустых строки/строк после каждых студентов имени, а не после каждого уровня.

iFile = open('Inschool.csv',) 
reader = csv.reader(iFile) 
IFILE = open('notinschool.csv') 
READER = csv.reader(IFILE) 
oFile = open('combined.csv','wb') 
writer_a = csv.writer(oFile, delimiter='|', quoting=csv.QUOTE_ALL) 
writer_b = csv.writer(oFile, delimiter='|', quoting=csv.QUOTE_ALL, lineterminator="\n\n\n\n") 

for row in READER: 
    writer_a.writerow(row) 

    writer_b.writerow([]) 

for row in reader: 
    writer_b.writerow(row) 

Я был бы признателен, если бы кто-то мог мне помочь. Благодарю.

+0

В файлах csv нет понятия «страницы» или «разрывы страниц». Не могли бы вы расширить процесс, который вы собираетесь использовать для преобразования CSV-файла на страницы? –

+0

@ Robᵩ Если не разрыв страницы, 3 строки между каждым классом тоже будут полезны. Я отредактировал вопрос и добавил дополнительный код, чтобы уточнить, что сейчас. – Alexander

ответ

1

Вы можете сделать это очень просто в терминале. Просто cd в каталог и сделать команду cat inschool.csv notinschool.csv > combined.csv

Если вы хотите сделать это в Python я хотел бы сделать:

in_file1 = open("inschool.csv","r").read().split("\n") 
in_file2 = open("notinschool.csv","r").read().split("\n") 

out_file = open("combined.csv","w") 

for line in in_file1: 
    if line: 
     out_file.write(line + "\n") 

for line in in_file2: 
    if line: 
     out_file.write(line + "\n") 

чтение файлов, как выше, не является наиболее эффективным, но если они маленькие это не имеет большого значения, и легче визуализировать происходящее. вы можете использовать свой метод входных файлов с этим b/c, концепция остается неизменной :)

Я только что использовал этот модуль под названием pandas, и он предназначен для DataFrames. Они намного проще в использовании, обработке, навигации и слиянии, чем в синтаксическом анализе текстовых файлов.

+0

Этот код смог добавить строку между двумя разными csv, но не разрешал 3 строки/строки после каждой проблемы со стартом. Спасибо за ваш ответ, хотя :) – Alexander

+0

если они пустые строки, вы можете сделать 'if line:', который проверяет, есть ли у них хороший материал. проверьте обновление, которое я сделал –

+0

Например, у меня есть оценки 10, 11 и 12. Мне нужны строки после 10 значений каждого сорта. Имея в виду; 10 классов 10, затем 3 пустые строки, затем 10 значений класса 11 и т. Д. Поблагодарили бы за вашу помощь – Alexander

Смежные вопросы