Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用r+打开csv;它正在写入文件的末尾_Python_Csv - Fatal编程技术网

Python 用r+打开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

我正试图从一个.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()

“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()

如果一切正常,最好先将数据写入新文件,然后重命名它。否则,如果您的程序出现运行时错误,文件可能会出错。