Using csvreader against a gzipped file in Python
with gzip.open('test2.csv.gz', 'w') as f:
#csv_w = csv.writer(io.TextIOWrapper(f, write_through=False)) # write empty csv.gz file
csv_w = csv.writer(io.TextIOWrapper(f, write_through=True)) # ok
csv_w.writerow(['a', 'b', 'c'])
csv_w.writerow([1,2,3])
csv_w.writerow([4,5,6])
https://docs.python.org/3/library/io.html
如果write_through为True,则保证不会调用write() buffered:立即在TextIOWrapper对象上写入的任何数据 处理到它的底层二进制缓冲区。
问题>我想缓冲写入并设置write_through=False
。但是,它将生成空的csv.gz文件。但是,如果我切换到write_through=True
,它就可以工作。
此处仅支持write_through=True
的任何原因?
Python版本:3.5
答案 0 :(得分:1)
为了压缩文件,GZ必须在文件中找到模式。 GZ使用的压缩公式分析了有问题的文件,如果它不存在,它就不会从我所知道的内容中输出任何内容。您可以阅读有关DEFLATE如何工作的更多信息here
设置" write_through"标志为True,它将缓冲区刷新到磁盘,从那里GZ可以读取它。如果你不这样做,那么CSV编写器会将信息保存在gzip无法访问的本地缓冲区中。
我希望有所帮助。
如果要直接写入文件,可以执行以下操作,无需io
缓冲区。
gzip.open('test2.csv.gz', 'wt', newline='') as f:
csv_w = csv.writer(f) # ok