2016-09-20 53 views
0

我是一個noobie。Python CSV:我可以用'open'而不是兩個來做到這一點嗎?

我寫了幾個腳本來修改我使用的CSV文件。

腳本:

1)改變CSV文件的標題那麼保存到一個新的CSV文件,。

2.)加載該CSV文件,並使用DictWriter更改選擇列的順序。

from tkinter import * 
from tkinter import filedialog 
import os 
import csv 

root = Tk() 
fileName = filedialog.askopenfilename(filetypes=(("Nimble CSV files", "*.csv"),("All files", "*.*"))) 
outputFileName = os.path.splitext(fileName)[0] + "_deleteme.csv" #my temp file 
forUpload = os.path.splitext(fileName)[0] + "_forupload.csv" 

#Open the file - change the header then save the file 
with open(fileName, 'r', newline='') as infile, open(outputFileName, 'w', newline='') as outfile: 
    reader = csv.reader(infile) 
    writer = csv.writer(outfile, delimiter=',', lineterminator='\n') 

    row1 = next(reader) 

    #new header names 
    row1[0] = 'firstname' 
    row1[1] = 'lastname' 
    row1[4] = 'phone' 
    row1[5] = 'email' 
    row1[11] = 'address' 
    row1[21] = 'website' 

    #write the temporary CSV file 
    writer.writerow(row1) 
    for row in reader: 
     writer.writerow(row) 

#Open the temporary CSV file - rearrange some columns 
with open(outputFileName, 'r', newline='') as dInFile, open(forUpload, 'w', newline='') as dOutFile: 
    fieldnames = ['email', 'title', 'firstname', 'lastname', 'company', 'phone', 'website', 'address', 'twitter'] 
    dWriter = csv.DictWriter(dOutFile, restval='', extrasaction='ignore', fieldnames=fieldnames, lineterminator='\n') 
    dWriter.writeheader() 

    for row in csv.DictReader(dInFile): 
     dWriter.writerow(row) 

我的問題是:有沒有更有效的方法來做到這一點?

看來我不應該做一個臨時的CSV文件(「_deleteme.csv」)然後我刪除。

我認爲製作臨時CSV文件是一個新手舉動 - 有沒有辦法做到這一切與「開放」的聲明?

感謝您的任何幫助,這是不勝感激。

--Luke

回答

0

csvfile可以是具有write()方法的任何對象。您可以製作自定義元素,或使用StringIO。你必須自己驗證效率。

+0

謝謝! –

相關問題