【问题标题】:Parsing CSV files using Python 2.7使用 Python 2.7 解析 CSV 文件
【发布时间】:2015-10-01 18:40:16
【问题描述】:

我正在尝试编写一个脚本,该脚本将打开一个 CSV 文件,并根据csv.csv 的第 4 列中唯一电话号码的匹配条件将该文件中的行写入新的 CSV 文件。电话号码总是在第 4 列中,并且在文件中经常重复,但是其他列通常是唯一的,因此每一行本质上都是唯一的。

我正在阅读的 csv 文件中的一行如下所示:(TN 为 9259991234

2,PPS,2015-09-17T15:44,9259991234,9DF51758-A2BD-4F65-AAA2

我在下面的代码中遇到错误,说“_csv.writer”不可迭代,我不确定如何修改我的代码来解决问题。

import csv
import sys
import os

os.chdir(r'C:\pTest')

with open(r'csv.csv', 'rb') as f:
    reader = csv.reader(f, delimiter=',')
    with open (r'new_csv.csv', 'ab') as new_f:
        writer = csv.writer(new_f, delimiter=',')
        for row in reader:
            if row[3] not in writer:
                writer.writerow(new_f)

【问题讨论】:

  • 您希望row[3] not in writer 做什么?您不能测试作家的会员资格;该数据已经写入。如果您想跟踪已处理的电话号码,则需要保留一个单独的 set() 对象并对其进行测试。

标签: python python-2.7 csv


【解决方案1】:

您的错误源于此表达式:

row[3] not in writer

您不能针对 csv.writer() 对象测试成员资格。如果您想跟踪您是否已经处理过电话号码,请使用单独的 set() 对象来跟踪这些:

with open(r'csv.csv', 'rb') as f:
    reader = csv.reader(f, delimiter=',')
    with open (r'new_csv.csv', 'ab') as new_f:
        writer = csv.writer(new_f, delimiter=',')
        seen = set()
        for row in reader:
            if row[3] not in seen:
                seen.add(row[3])
                writer.writerow(row)

请注意,我还更改了您的writer.writerow() 电话;你想写行,而不是文件对象。

【讨论】:

  • 效果很好,谢谢!这是我第一次尝试用 Python 编写任何东西,因此非常感谢您的反馈。
猜你喜欢
  • 2012-01-19
  • 2015-09-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-26
  • 2021-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多