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

标签 python parsing csv

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

我目前正在尝试创建一个自定义的 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/

相关文章:

python - R中可能的链接刷牙

python - 如何在pyqt的QLineEdit中限制用户输入

python - 使用 Universal Feed Parser 获取日期时出现问题

parsing - 在递归下降解析器中实现 "cut"

python - 在python中将多个JSON文件中的信息提取到单个CSV文件

powershell - 将所有 ADUsers 封装在 CSV 文件中

python - SimpleCV NameError:名称 'images'未定义

python - 用python进行傅立叶变换

java - 无法使用 JSON 解析器将网页中的图像显示到 android

python - 加载 csv 到列表但跳过换行