gpt4 book ai didi

python - 如何使用 csv 工具处理 zip 文本文件?

转载 作者:行者123 更新时间:2023-12-01 02:21:52 25 4
gpt4 key购买 nike

update-my file.txt.zp 以制表符分隔,看起来像这样: file.txt.zp我想用 _/

分割第一列<小时/>

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

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'

最佳答案

更新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')

这将帮助您克服第一个障碍。

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

原始答案如下...

<小时/>

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

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

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

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

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

另一个问题是输出文件没有像名称所示那样压缩。

关于python - 如何使用 csv 工具处理 zip 文本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47882565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com