gpt4 book ai didi

python 如何读取 tsv 文件,清理它并另存为新文件?

转载 作者:太空宇宙 更新时间:2023-11-04 10:21:11 26 4
gpt4 key购买 nike

我想从 tsv 文件的第 4 列中删除所有标点符号,然后保存整个文件。这是我的代码:

import csv
import string

exclude = set(string.punctuation)

with open("test1") as tsvfile:
tsvreader = csv.reader(tsvfile, delimiter="\t")
for line in tsvreader:
line[4] = ''.join(ch for ch in line[4] if ch not in exclude)
tsvfile.close()

上面的代码工作正常,但我的文件没有保存我所做的更改。如何保存旧文件中的更改?

最佳答案

您没有编写任何更改,您只是更改每一行中的每五个元素而不对其进行任何操作,如果您想更改原始文件,您可以写入 tempfile 并执行shutil.move 用更新后的临时文件替换原始文件:

import string

exclude = string.punctuation
from tempfile import NamedTemporaryFile
from shutil import move

with open("test1") as tsvfile, NamedTemporaryFile(dir=".",delete=False) as t:
tsvreader = csv.reader(tsvfile, delimiter="\t")
temp = csv.writer(t,delimiter="\t")
for row in tsvreader:
row[4] = row[4].strip(exclude)
temp.writerow(row)

move(t.name,"test1")

如果您想创建一个新文件而不是更新原始文件,您只需要打开一个新文件并写入每个清理过的行:

with open("test1") as tsvfile, open("out","w") as  t:
tsvreader = csv.reader(tsvfile, delimiter="\t")
temp = csv.writer(t,delimiter="\t")
for row in tsvreader:
row[4] = row[4].strip(exclude)
temp.writerow(row)

去除标点符号 str.strip(exclude) 就足够了。如果你想从任何地方删除,你可以返回 ''.join([ch for ch in line[4] if ch not in exclude]) 但如果你要从任何地方删除,那么你应该使用 str.translate:

 row[4] = row[4].translate(None,exclude) 

如果要加空格:

from string import maketrans
tbl = maketrans(exclude," "*len(exclude))

....
row[4] = row[4].translate(tbl)

最后,如果您实际上是指第四列,那么它将是 row[3] 而不是 row[4]

关于python 如何读取 tsv 文件,清理它并另存为新文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32261599/

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