如何使用csv工具获取zip文本文件?

时间:2017-12-19 08:14:15

标签: python

update-my file.txt.zp是制表符分隔的,看起来像这样: file.txt.zp 我想将第一个col分割为:_ /

原帖: 我有一个非常大的压缩制表符分隔文件。 我想打开它,一次扫描一行,拆分一些col,然后将其写入新文件。 我得到了各种错误(每次我修复另一个pops) 这是我的代码:

import csv
import re
import gzip

f = gzip.open('file.txt.gz')
original = f.readlines()
f.close()

original_l = csv.reader(original)
for row in original_l:
    file_l = re.split('_|:|/',row)
    with open ('newfile.gz', 'w', newline='') as final:
        finalfile = csv.writer(final,delimiter = ' ')
        finalfile.writerow(file_l)

谢谢!

对于这段代码我得到了错误:

for row in original_l:
_csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)

所以基于我在这里找到的内容,我在f.close()之后添加了这个:

original = original.decode('utf8')

然后得到错误:

original = original.decode('utf8')
AttributeError: 'list' object has no attribute 'decode'

1 个答案:

答案 0 :(得分:2)

更新2

此代码应生成您之后的输出。

import csv
import gzip
import re

with gzip.open('file.txt.gz', mode='rt') as f, \
        open('newfile.gz', 'w') as final:
    writer = csv.writer(final, delimiter=' ')
    reader = csv.reader(f, delimiter='\t')
    _ = next(reader)        # skip header row
    for row in reader:
        writer.writerow(re.split(r'_|:|/', row[0]))

<强>更新

以文本模式打开gzip文件,因为Python 3中的CSV模块需要str个对象。

f = gzip.open('file.txt.gz', 'rt')

在创建csv.reader时指定分隔符。

original_l = csv.reader(original, delimiter='\t')

这将让你超越第一道障碍。

现在您需要解释数据是什么,您希望提取哪些列以及输出应该是什么样的。

原始答案如下......

一个明显的问题是输出文件不断被下一行输入覆盖。这是因为输出文件每行一次以(超过)写入模式(“&#39; w``”)打开。

最好在循环外打开输出文件。

此外,创建阅读器时未指定CSV文件分隔符。您说该文件是制表符分隔的,因此请指定:

original_l = csv.reader(original, delimiter='\t')

另一方面,您的代码尝试使用其他分隔符分割每一行,但是,来自csv.reader的行表示为列表,而不是re.split()代码所需的字符串

另一个问题是输出文件没有像顾名思义那样压缩。