簡體   English   中英

Python:讀取CSV文件並寫入另一個文本文件

[英]Python: Read CSV file and write to another text file

我有這個.csv文件......

    id,first_name,last_name,email,date,opt-in,unique_code
    1,Jimmy,Reyes,jreyes0@macromedia.com,12/29/2016,FALSE,ER45DH
    2,Doris,Wood,dwood1@1und1.de,04/22/2016,,MU34T3
    3,Steven,Miller,smiller2@go.com,07/31/2016,FALSE,G34FGH
    4,Earl,Parker,eparker3@ucoz.com,01-08-17,FALSE,ASY67J
    5,Barbara,Cruz,bcruz4@zdnet.com,12/30/2016,FALSE,NHG67P

如果選擇加入值為空,則應打印“0”。 首先打印csv中的最后一個值,然后打印特定格式的所有名稱,值對,如下面預期的輸出文件中所示。

我的預期產量

ER45DH<tab>"id"="1","first_name"="Jimmy","last_name"="Reyes","email"="jreyes0@macromedia.com","date"="12/29/2016","opt-in"="FALSE"
MU34T3<tab>"id"="2","first_name"="Doris","last_name"="Wood","email"="dwood1@1und1.de","date"="04/22/2016,"opt-in"="0"
.......

我的代碼到目前為止..

import csv

with open('newfilename.csv', 'w') as f2:
    with open('mycsvfile.csv', mode='r') as infile:
        reader = csv.reader(infile)
        for i,rows in enumerate(reader):
            if i == 0:
               header = rows 
            else:
                if rows[5] == '':
                   rows[5] = 0;
                pat = rows[0]+'\t'+'''"%s"="%%s",'''*(len(header)-2)+'''"%s"="%%s"‌​\n'''
                print pat
                f2.write(pat % tuple(header[1:]) % tuple(rows[1:]))
    f2.close()

此代碼生成此輸出

1   "first_name"="Jimmy","last_name"="Reyes","email"="jreyes0@macromedia.com","date"="12/29/2016","opt-in"="FALSE","unique_code"="ASD34R"‌​
2   "first_name"="Doris","last_name"="Wood","email"="dwood1@1und1.de","date"="04/22/2016","opt-in"="0","unique_code"="SDS56N"

正如您所看到的,“id”列缺失,我想在第一個位置使用unque_code。

我將非常感謝任何幫助/想法/指針。

謝謝

你可以修改你在文件中輸入列表的方式,如下所示:

# -*- encoding: utf-8 -*-
import csv

with open('newfilename.csv', 'w') as f2:
    with open('mycsvfile.csv', mode='r') as infile:
        reader = list(csv.reader(infile))  # load the whole file as a list
        header = reader[0]  # the first line is your header
        for row in reader[1:]:  # content is all the other lines
            if row[5] == '':
                row[5] = 0
            line = row[-1]+'\t'  # adding the unique code
            for j, e in enumerate(row[:-2]):
                line += '"'+header[j]+'"="'+e+'",'  # adding elements in order
            f2.write(line[:-1]+'\n')  # writing line without last comma

我按照你獲得標題的方式進行了一些修改,以避免對所有行進行不必要的測試。

如果您的文件非常大並且/或者您不想將其完全加載到內存中,則可以修改為:

...
reader = csv.reader(infile)  # no conversion to list
header = next(reader)  # get first line
for row in reader:  # continue to read one line per loop
    ...

您應該單獨處理標題行,然后正確處理每一行。 你的代碼可以成為:

with open('newfilename.csv', 'w') as f2:
    with open('mycsvfile.csv', mode='r') as infile:
        reader = csv.reader(infile)
        header = next(reader)  # store the headers and advance reader pointer
        for rows in reader:
            if rows[5]=="": rows[5] = "0"  # special processing for 6th field
            # uses last field here
            pat = rows[-1]+'\t'+'''"%s"="%%s",'''*(len(header)-2)+'''"%s"="%%s"‌​\n'''
            # process everything except last field
            fd2.write((pat % tuple(header[:-1])) % tuple(rows[:-1]))

無需將整個文件加載到內存中......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM