我有一个包含管道的txt文件分隔值,但遗憾的是,我遇到了一些错误,csv DictReader假设列中的逗号实际上是n列的n个值。我试过了
skipinitialspace = True
参数,但它不起作用。
我的txt文件,“test.csv”;
Name|Company|Age|Gender|Fav Color|Fav Food
John|Custom Inc|23|Male|Red, Blue, Yellow|Chocolate
Mary|Troopers , Inc|25|Female|Black|Chocolate
Riki|Dorw Technology|33|Male|White, Yellow, Black|Ice cream, pudding
我的代码:
import csv
name= []
company = []
age = []
gender = []
fav_color = []
fav_food = []
with open("test.csv", "rU") as f:
reader = csv.Dictreader(f, delimiter = '|')
for row in reader:
name.append(row['Name'])
company.append(row['Company'])
age.append(row['Age'])
gender.append(row['Gender'])
fav_color.append(row['Fav Color'])
fav_food.append(row['Fav Food'])
RESULT_ADD = [[] for _ in range(len(name))]
for attr in range(len(name)):
RESULT_ADD[attr].append(name[attr])
RESULT_ADD[attr].append(company[attr])
RESULT_ADD[attr].append(age[attr])
RESULT_ADD[attr].append(gender[attr])
RESULT_ADD[attr].append(fav_color[attr])
RESULT_ADD[attr].append(fav_food[attr])
with open("result.csv", "w") as newfile:
header = ['NAME_OF_CEO', 'NAME_OF_COMPANY' , 'AGE', 'GENDER', 'FAV_COLOR', 'FAV_FOOD']
wr.csv.writer(newfile, delimiter= ';', quoting = csv.QUOTE_MINIMAL)
wr.writerow(header)
for item in RESULT_ADD:
wr.writerow(item)
我得到了什么;
NAME_OF_CEO;NAME_OF_COMPANY;AGE;GENDER;FAV_COLOR;FAV_FOOD
John;Custom Inc;23;Male;Red,Blue,Yellow;Chocolate
Mary;T,r,o,o,p,e,r,s,,, ,I,n,c;25;Female;Black;Chocolate
Riki;Dorw Technology;33;Male;White,Yellow,Black;Ice cream,pudding
这里的第一个问题是;
对于John,FAV_COLOR包含“Red”,而FAV_FOOD包含“Blue”,下一个无名列包含“Yellow”和“Banana”,位于下一个空的无名列。
对于Mary,T,r,o,o,p,e,r,s ,,,, I,n,c,在LibreOffice中打开时,单词“Troopers”位于NAME_OF_THE_COMPANY但是“Inc”位于AGE专栏,然后年龄25位于下一栏,FAV_COLOR等,
对于Riki,与John相同的问题
答案 0 :(得分:1)
您可以尝试使用pandas,因为数据帧对于处理表格数据非常有用:
import pandas as pd
df = pd.read_csv("test.csv", sep = "|")
df.to_csv("result.csv", sep=";")
通过这种方式,您无需为每个属性维护和填充单个列表。一旦习惯了数据帧,它们就会很棒。
关于在LibreOffice中导入,我没有对此进行测试,但根据文档https://help.libreoffice.org/Calc/Importing_and_Exporting_CSV_Files:
如果字段或单元格包含逗号,则字段或单元格必须为 用单引号(')或双引号(“)括起来。
我希望有所帮助!