我正在尝试从.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()
答案 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()