用r +打开csv,它正在写入文件的末尾

时间:2016-04-05 02:40:42

标签: python csv

我正在尝试从.csv文件中获取数据,将其分成元组列表,对此进行处理,然后将更改保存回csv文件。我的问题是,我没有替换数据,而是将更改添加为文件底部的新行。我试图避免重新打开文件并使用csv模块。下面的代码是我打开它,将其保存为我的元组列表,并尝试将其保存回文件,但是它会附加文件。

items_data = open("test.csv", "r+")
my_list = items_data.read().strip().split('\n')
for line in range(len(my_list)):
    my_list[line] = tuple(my_list[line].split(","))
for i in range(len(my_list)):
    for a in range(0,4):
        if a==3:
            items_data.write(my_list[i][a] + "\n")
        else:
            items_data.write(my_list[i][a] + ",")
items_data.close()

2 个答案:

答案 0 :(得分:0)

' R +'打开文件进行读写。除非您使用f.seek(offset)指定位置,否则写入将结束。因此,不是试图找出每一行的偏移值,而是更容易读取整个文件,并处理每一行,并将整个内容写回文件。

答案 1 :(得分:0)

从文件中读取会移动“文件指针”。由于您已读取所有行,因此文件指针现在指向文件末尾。因此,在文件末尾会发生进一步的写入。

要从文件的开头写入,您需要在开始写回数据之前将文件指针重置为文件的开头:

items_data.seek(0,0)

您修改后的代码应如下所示:

items_data = open("test.csv", "r+")
my_list = items_data.read().strip().split('\n')
for line in range(len(my_list)):
    my_list[line] = tuple(my_list[line].split(","))

# rewind file pointer to the start of the file
items_data.seek(0,0)

for i in range(len(my_list)):
    for a in range(0,4):
        if a==3:
            items_data.write(my_list[i][a] + "\n")
        else:
            items_data.write(my_list[i][a] + ",")
items_data.close()