Python 如何将csv工具用于zip文本文件?

Python 如何将csv工具用于zip文本文件?,python,Python,update my file.txt.zp由制表符分隔,看起来像这样: 我想将第一列拆分为:\u/ 原职: 我有一个非常大的压缩标签分隔文件。 我想打开它,一次扫描一行,拆分一些列,然后将其写入一个新文件。 我遇到了各种各样的错误(每次我修正彼此的错误) 这是我的代码: import csv import re import gzip f = gzip.open('file.txt.gz') original = f.readlines() f.close() original_l = c

update my file.txt.zp由制表符分隔,看起来像这样: 我想将第一列拆分为:\u/


原职: 我有一个非常大的压缩标签分隔文件。 我想打开它,一次扫描一行,拆分一些列,然后将其写入一个新文件。 我遇到了各种各样的错误(每次我修正彼此的错误) 这是我的代码:

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?)
original = original.decode('utf8')
AttributeError: 'list' object has no attribute 'decode'
根据我在这里找到的,我在f.close()之后添加了这个:

然后得到了错误:

for row in original_l:
_csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)
original = original.decode('utf8')
AttributeError: 'list' object has no attribute 'decode'

更新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')
这会让你越过第一个障碍

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

原来的答案如下


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

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

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

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

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


另一个问题是输出文件没有按名称所示进行压缩。

(每次我修复彼此时都会弹出)
这是程序员的日常生活。当前的错误消息是什么?在解决问题的同时,你也要考虑到这个问题。除了添加错误信息,还请考虑添加一个小例子来演示你想要达到的目标。谢谢,这对我来说都是新的,所以我正在努力解决这些基础问题。目前,它甚至没有涉及到代码的这一部分。错误指的是您在我编辑的问题中看到的第一行。(另一方面,您的代码尝试使用其他分隔符拆分每一行,但是,来自csv.reader的行表示为列表,而不是re.split()代码所需的字符串。)如何将列表转换为字符串或对列表使用拆分?@拉拉:CSV文件中的分隔符是什么?也许您可以为正在处理的输入文件添加一个小的未压缩示例。@拉拉:更新了答案并提供了一些详细信息,以帮助您解决第一个问题。非常感谢您的帮助。我上传了一些jpeg格式的图片。它是以制表符分隔的。