【问题标题】:Python CSV Write Only Specific RowsPython CSV 只写特定行
【发布时间】:2018-09-19 22:48:02
【问题描述】:

我正在尝试读取一个开头包含几行无用数据的 CSV 文件,并仅提取包含相关数据的行。我已经尝试了数十种代码变体,并尝试使用 Pandas 之类的库来实现它,但没有任何成功。 CSV 示例如下所示,前 5 行包含我不需要的数据。我想写入新文件的唯一行是“解决方案”之后的行。

MWU Checker - 09/12/2018
Server v7.4,Admin,Product
RECOMMEND
Update,Issue Statement,Bypass,Resolution
SOLUTION
IP Address,DNS Name,OS,Status
10.0.0.1,win08a,Windows Server 2008 R2,Up to date
10.0.0.2,win08b,Windows Server 2008 R2,Up to date
10.0.0.3,win08c,Windows Server 2008 R2,Out of date
10.0.0.4,win08d,Windows Server 2008 R2,Up to date
10.0.0.5,win08e,Windows Server 2008 R2,Up to date

鉴于“解决方案”将始终位于第 5 行,我尝试使用以下代码写入 CSV:

import csv
from itertools import islice

def checker():
    with open('sample_file.csv', 'r') as csv_in, open('output.csv', 'w', newline='') as csv_out:
    data = csv.reader(islice(csv_in, 5, None), delimiter=',')
    writer = csv.writer(csv_out)
    for row in data:
        print (row)
        writer.writerow(row)

令人沮丧的是控制台会打印出正确的数据,只显示第 6 行或更大的行,但编写器从不更新“output.csv”文件,它只是写入与原始数据完全相同的数据“sample_file.csv”。

我确信有一个简单的解决方案,但我已经尝试了无数的代码变体,并在 Pandas 中也尝试过,但发现当你有奇怪格式的 CSV 时,Pandas 不能很好地工作,例如这些。

【问题讨论】:

  • 我认为您的代码有效。当我运行它时,我无法重现您的问题。 output.csv 仅包含打印到标准输出的行。你确定你没有在你程序的其他部分爆破output.csv?
  • @MattMessersmith 你是对的!我的程序的另一部分正在执行,我什至没有意识到。事后看来,我可能应该撕掉上面的代码并单独测试它,但是谢谢!

标签: python pandas csv split itertools


【解决方案1】:

只读取数据行并将其存储到 pandas 数据框中应该可以使用:

import pandas as pd    

df = pd.read_csv('sample_file.csv', skiprows=5)

之后可以写出新的 csv 文件:

df.to_csv('output.csv', index=False)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 2015-04-04
    • 2014-10-05
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    • 2019-04-15
    相关资源
    最近更新 更多