Python CSV:我可以使用'open'代替两个吗?

时间:2016-09-20 13:44:27

标签: python csv dictionary header temporary-files

我是一个noobie。

我编写了几个脚本来修改我使用的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文件是一个新手 - 有一种方法可以用一个'开放'语句来完成这一切吗?

感谢您的帮助,非常感谢。

- 卢克

1 个答案:

答案 0 :(得分:0)

csvfile可以是write()方法的任何对象。您可以制作自定义元素,或使用StringIO。你必须自己验证效率。