我试图读取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,就像通过迭代来制作副本一样。
答案 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)`