2017-05-04 2 views
0

パイプを含むtxtファイルがある|残念ながら私はいくつかのエラーが発生しましたが、csv DictReaderは列のカンマが実際にはn列のn値であることを前提としていました。私は他の区切り文字でcsvにテキストを分割するが、各列にカンマを維持する

skipinitialspace = Trueの

パラメータを試してみましたが、それはうまくいきませんでした。

My 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_FOODは「ブルー」が含まれている間、FAV_COLORは、「赤」が含まれており、次の無名の欄には、「イエロー」と次の空の無名の欄にある「バナナ」と同じが含まれています。

LibreOfficeで開くとき、Mary、T、r、o、o、p、e、r、s ,,,,, I、n、cの場合、「Troopers」という語句はNAME_OF_THE_COMPANYにありますが、 「ジョン・

+0

あなたはcompany.appendを(変更してみましたか'? – imran

+0

@imran申し訳ありませんが、編集されました。 – yunaranyancat

+0

Python 2.7とPython 3.6でコードをテストしましたが、出力を再現できません。 ';'文字で区切られた適切な数の列を持つ新しいファイルを取得します。ここに貼り付けたコードが間違った出力を引き起こすことは確かですか? – Craig

答えて

1

と同様の問題は、データフレームが非常にあるとしてあなたは、パンダを使用して試すことができます、など、その後、年齢25は次の列、FAV_COLORに位置していた、AGE列にリキのために

を位置していました表形式のデータを扱うのに便利です:

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によると:(フィールドまたはセルにカンマが含まれている場合は

、フィールドまたはセルは は、単一引用符で囲む必要があります'[会社 '])(行をcompany.appendする)「[会社]')または二重引用符( ")。

私はそれが役に立てば幸い!

関連する問題