Python中的文件I / O.

时间:2015-09-02 17:51:00

标签: python csv file-io io

我试图读取CSV文件,然后将读取的CSV写入另一个CSV文件。

到目前为止,这是我的代码:

import csv 
with open ("mastertable.csv") as file:
    for row in file:
    print row  
with open("table.csv", "w") as f:
   f.write(file)

我最终想要读取一个CSV文件,写入带有附加数据的新CSV。

我尝试运行时遇到此错误。

Traceback (most recent call last):
File "readlines.py", line 8, in <module>
f.write(file)
TypeError: expected a character buffer object

从我的理解,我似乎必须关闭文件,但我想自动关闭它?

我不确定为什么我可以将字符串写入文本,但我不能简单地将CSV写入另一个CSV,就像通过迭代来制作副本一样。

3 个答案:

答案 0 :(得分:2)

要读取CSV并写入另一个,您可能会执行以下操作:

with open("table.csv", "w") as f:
    with open ("mastertable.csv") as file:
        for row in file:
           f.write(row)

但是如果在转录时需要编辑行,我只会这样做。对于所描述的用例,您可以先用shutil复制它,然后打开它以附加到它。这种方法会更快,更不用说更具可读性了。

with运算符将为您处理文件关闭,并在您离开该代码块时关闭该文件(由缩进级别给出)

答案 1 :(得分:1)

看起来您打算使用Python csv模块。以下应该是您尝试实现目标的良好起点:

import csv 

with open("mastertable.csv", "r") as file_input, open("table.csv", "wb") as file_output:
    csv_input = csv.reader(file_input)
    csv_output = csv.writer(file_output)

    for cols in csv_input:
        cols.append("more data")
        csv_output.writerow(cols)

这将一次读取一行中的mastertable.csv文件作为列列表。我追加一个额外的列,然后将每一行写入table.csv

请注意,当您离开with语句的范围时,文件会自动关闭。

答案 2 :(得分:0)

文件变量实际上不是实际的文件数据,但它是一个用于读取数据的引用指针。执行以下操作时:

with open ("mastertable.csv") as file: for row in file: print row

文件指针自动关闭。 write方法需要字符缓冲区或字符串作为输入而不是文件指针。

如果您只想复制数据,可以执行以下操作:

 data = ""
 with open ("mastertable.csv","r") as file:
     data = file.read()
 with open ("table.csv","a") as file:
     file.write(data)`