Python 用r+打开csv;它正在写入文件的末尾
我正试图从一个.csv文件中获取数据,将其分离成一个元组列表,使用它进行处理,然后将更改保存回csv文件。我的问题是,它不是替换我拥有的数据,而是将更改作为新行添加到文件底部。我试图避免重新打开文件和使用csv模块。下面的代码是我打开它,将其保存为元组列表,并尝试将其保存回文件,但它只是附加文件Python 用r+打开csv;它正在写入文件的末尾,python,csv,Python,Csv,我正试图从一个.csv文件中获取数据,将其分离成一个元组列表,使用它进行处理,然后将更改保存回csv文件。我的问题是,它不是替换我拥有的数据,而是将更改作为新行添加到文件底部。我试图避免重新打开文件和使用csv模块。下面的代码是我打开它,将其保存为元组列表,并尝试将其保存回文件,但它只是附加文件 items_data = open("test.csv", "r+") my_list = items_data.read().strip().split('\n') for line in range
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()
“r+”打开文件进行读取和写入。除非使用f.seek(offset)指定位置,否则写入将在末尾。因此,与其试图计算每一行的偏移量值,不如读取整个文件,处理每一行,然后将整个内容写回一个文件 读取文件会移动“文件指针”。由于您已读入所有行,文件指针现在指向文件的末尾。因此,进一步的写操作将发生在文件的末尾 要从文件开头写入,需要在开始回写数据之前,通过执行以下操作将文件指针重置为文件开头:
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()
如果一切正常,最好先将数据写入新文件,然后重命名它。否则,如果您的程序出现运行时错误,文件可能会出错。