КШМ писатель ставит кавычки в каждой строке
Я пытаюсь объединить несколько csv-файлов с одинаковым форматом в один.
merge_list = glob.glob(gndlbsum+"*gndlbsum.csv")
filewriter_lbsum = target_dir+"gndlbsum_master.csv"
#get the list of csv files and set the output file
counter=0
for file in merge_list:
with open(file,"rU") as csv_file:
filereader = csv.reader(csv_file)
with open(filewriter_lbsum,"a") as f:
writer = csv.writer(f, delimiter = "|")
#check to see if it's the first file, if it is, add header,
#otherwise skip first row
if counter<1:
for row in filereader:
writer.writerow(row)
counter+=1
else:
header = next(filereader,None)
for row in filereader:
writer.writerow(row)
Когда я делаю это так, каждая строка в выходном csv полностью заключена в двойные кавычки, я попытался использоватьlist.append(row)
вместо этого, но это не имеет значения, так как строка заключена в двойные кавычки. Есть ли способ избежать этого?
Редактировать:
Вот пример исходного файла:
COL1|COL2|COL3
1|2|3
4|5|6
И вывод:
"COL1|COL2|COL3"
"1|2|3"
"4|5|6"
2 ответа:
Я думаю, что это избавит от кавычек, которые вызваны тем, что не говорят создаваемым
csv.reader
s, что разделители во входном файле являются символами"|"
, а не символами по умолчанию, которые являются символами","
.merge_list = glob.glob(gndlbsum + "*gndlbsum.csv") file_writer_lbsum = os.path.join(target_dir, "gndlbsum_master.csv") # Append each csv file in the list to the output file first_file = True for file in merge_list: with open(file, "rU") as csv_file: reader = csv.reader(csv_file, delimiter="|") with open(file_writer_lbsum, "w" if first_file else "a") as f: writer = csv.writer(f, delimiter="|") # Unless it's the first file, skip its header row if not first_file: next(reader) first_file = False writer.writerows(reader)
Модуль csv автоматически добавляет двойные кавычки в конце каждой строки. Не зная точно, как выглядит ваш csv-файл, попробуйте следующее:
merge_list = glob.glob(gndlbsum+"*gndlbsum.csv") filewriter_lbsum = target_dir+"gndlbsum_master.csv" #get the list of csv files and set the output file counter=0 for file in merge_list: with open(file,"rU") as csv_file: filereader = csv.reader(csv_file, skipinitialspace=True) with open(filewriter_lbsum,"a") as f: writer = csv.writer(f,delimiter = "|", quoting=csv.QUOTE_NONE) #check to see if it's the first file, if it is, add header, #otherwise skip first row if counter<1: for row in filereader: writer.writerow(row) counter+=1 else: header = next(filereader,None) for row in filereader: writer.writerow(row)