提问人:aziz-ashy 提问时间:2/15/2021 最后编辑:aziz-ashy 更新时间:2/15/2021 访问量:164
如何同时读取和修改大型 CSV 文件?
How do i simultaneously read and modify a large CSV file?
问:
我有一个大的 csv 文件,我需要以各种方式迭代和修改。它太大了,我无法加载到内存中。
在下面的代码中,我试图做的是从我的数据中删除第 4 列。
import os
import csv
DIR_PATH = os.path.abspath(os.path.dirname(__file__))
FILE_NAME = "file-name"
DELIMITER = ";"
POINTER = 0
#Generator function that yields individual rows.
def get_row(csvfile, delimiter):
datareader = csv.reader(csvfile,delimiter=delimiter)
global POINTER
POINTER = csvfile.tell() #Initial position before any rows processed
for row in datareader:
yield row
csvfile.seek(POINTER)
if __name__ == "__main__":
csvfile = open(os.path.join(DIR_PATH, FILE_NAME + ".csv"), 'r+')
datawriter = csv.writer(csvfile, delimiter = DELIMITER, quotechar = '"', quoting=csv.QUOTE_MINIMAL)
count = 0
for row in get_row(csvfile,DELIMITER):
#Write every entry except row[4]
csvfile.seek(POINTER)
datawriter.writerow(tuple(row[ii] for ii in range(len(row)) if ii != 4))
POINTER = csvfile.tell()
csvfile.close()
我的输出如下所示:
标题行写得很好。
然后,它再次打印标题行的最后几个字符,但在自己的行中。
然后,第一个条目缺少第一个字符。
然后其他一切都很好,并且按预期运行。
看起来像这样:
Header 1; Header 2; Header 3; Header 4; Header 5
4; Header 5
Ata 1; Data 2; Data 3; Data 4; Data 5;
Data 1; Data 2; Data 3; Data 4; Data 5;
Data 1; Data 2; Data 3; Data 4; Data 5;
...
我不明白为什么会出错。我明确标记了阅读和写作的位置。
谢谢。
答: 暂无答案
评论
fh.tell
fh.seek