2017-05-04 66 views
0

我有一個txt文件包含管|定界值,但不幸的是,我遇到了一些錯誤,csv DictReader認爲列中的逗號實際上是n列的n個值。我曾嘗試將文本拆分爲csv的其他分隔符,但保留每列的逗號

skipinitialspace =真

參數,但沒有奏效。

我的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 

這裏的第一個問題是:

約翰,FAV_COLOR包含「紅色」,而FAV_FOOD包含「藍」,而下一個無名列包含「Yellow」和同爲「香蕉」,位於下一個空無名列。當在LibreOffice中打開時,單詞「Troopers」位於NAME_OF_THE_COMPANY中,但是「Inc」(位於NAME_OF_THE_COMPANY中) 「定位於年齡列,那麼年齡25定位於下一列,FAV_COLOR等,

對於內力,同樣的問題約翰

+0

你有沒有嘗試改變company.append([ '公司'])到company.append(行[ '公司'])? – imran

+0

@imran抱歉,這是一個錯字,編輯。 – yunaranyancat

+0

我用Python 2.7和Python 3.6測試了你的代碼,我無法重現你的輸出。我得到一個新的文件,它有適當數量的以';'字符分隔的列。你確定你在這裏粘貼的代碼導致錯誤的輸出嗎? – Craig

回答

1

您可以嘗試使用熊貓,作爲dataframes非常有用的表格數據:

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

如果字段或單元格中包含逗號,該字段或單元格必須 括在單引號( 「)或雙引號(「)。

我希望幫助!

相關問題