gpt4 book ai didi

python:如何从 CSV 中删除行和修改特定列表字符串

转载 作者:行者123 更新时间:2023-12-04 18:03:19 27 4
gpt4 key购买 nike

这是我第一次发帖提问,如有错误敬请见谅。

我目前正在尝试创建一个自定义的 python 程序(几乎是一个解析器)来接收这样的数据:

junk
junk
junk
junk
junk
junk
fields title title title
data_type d_type d_type d_type
data1 data2 data 3
data4 data 5 data6
data7 data8 data9
junk

我想要的输出是:

title   title   title
data1 data2 data3
data4 data5 data6
data7 data8 data9

这是我到目前为止的代码的工作部分:

import csv
import itertools
with open('file.log','rb') as csvfile:
rowlist = csv.reader(csvfile, delimiter = '\t')
for row in itertools.islice(rowlist,6,12):
print row

无论何时运行上述代码,它都会生成一系列列表,如下所示

['fields','title1', 'title2', 'title3']
['data_type','d_type','d_type', 'd_type']
['data1', 'data2', 'data3']
['data4', 'data5', 'data6']
['data7', 'data8', 'data9']

列表中的第一个数据条目(data1、data4、data7)始终是数字,而其他数据条目可以是任何字符串/数字/字符。

itertools 已经解决了切断文件顶部和底部的问题,但我仍在努力

  • 删除“data_type行”
  • 删除“字段”,即:['字段','title1','title2','title3']----->['title1','title2','title3']

我见过一些删除行/覆盖行的解决方案,但是,我没有太多可用内存,因此我必须将打开/关闭/写入保持在最低限度。非常感谢任何帮助。

最佳答案

只需对每一行进行切片:

  for row in islice(rowlist, 6, 12):
if row[0] == "data_type":
continue
elif row[0] == "fields":
print(row[1:])
else:
print(row)

如果您只是写行,请再次使用 islice:

for row in islice(rowlist, 6, 12):
if row[0] == "data_type":
continue
elif row[0] == "fields":
fileobj.write(islice(rowlist, 1,None))
else:
fileobj.write(row)

如果您实际上是想覆盖原始文件,您可以将这些行写入 tempfile并将原始文件替换为 shutil.move :

from shutil import move
from tempfile import NamedTemporaryFile

with open('file.csv', 'rb') as csvfile, NamedTemporaryFile(dir=".", delete=False) as temp:
rowlist = csv.reader(csvfile)
for row in islice(rowlist, 6, 12):
if row[0] == "data_type":
continue
elif row[0] == "fields":
temp.write(islice(rowlist, 1, None))
else:
temp.write(row)

move(temp.name,"file.csv")

关于python:如何从 CSV 中删除行和修改特定列表字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31549360/

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