【问题标题】:Looping over a CSV file, attempting to delete particular cells循环遍历 CSV 文件,尝试删除特定单元格
【发布时间】:2015-12-17 05:24:35
【问题描述】:

这是我目前所拥有的:

import csv
fp = open('C:/TemporaryDataFiles/RawData.csv', 'w')
csvFile = csv.writer(fp)


for number, begin, end, test in rows:
    if len(test.split()) <= 100:
        print("Row deleted!")
        print(len(test.split()))
        stock=[]
        begin=[]
        end=[]
        test=[]


    else:
        RowsToWrite= [str(number), str(begin), str(end), str(test)]
        csvFile.writerows(RowsToWrite)

我正在尝试遍历一个名为 rows 的大表,该表有四个子组件。它有number(代表产品的编号)、begin 时间、end 时间和一个test 列,其中有一个描述。

我正在尝试查看 test 中的单词是否少于 100 个。如果没有,则转到 if...else 语句的 else 部分,然后写入 RawData.csv 文件。

这不会产生任何错误,但是,它也不会给出正确的输出。有一些条目,都在 100 字以下,漏掉了。

我已经尝试了我能想到的尽可能多的迭代,但我觉得这里好像缺少一些基本的东西。

感谢任何帮助。

【问题讨论】:

  • 数据是什么样的?
  • 数字、开始和结束字段都很短——每个字段只有几个字符。描述要大得多——通常超过 100 个字。
  • 您检查了错误删除的描述吗?有时标点符号和特殊字符前后可以有空格,导致它们被计为单词。
  • 是的,我已经做到了——它们只是标准的文本/单词。没有什么会触发像你所说的那样的事情。

标签: python csv if-statement for-loop


【解决方案1】:

我认为writerows 正在寻找多行,而不仅仅是一个。喜欢RowsToWrite.append([str(number), str(begin), str(end), str(test)]),然后在for 循环之后使用csvFile.writerows(RowsToWrite)。保留您的导入和所有内容,但整个 for 循环将如下所示:

RowsToWrite = []
for number, begin, end, test in rows:
    if len(test.split()) <= 100:
        print("Row deleted!")
        print(len(test.split()))
        number=''
        begin=''
        end=''
        test=''

    RowsToWrite.append([str(number), str(begin), str(end), str(test)])

csvFile.writerows(RowsToWrite)

我猜writerows 方法在写入文件时使用逗号。这是完整的doc

您还可以在 for 循环中一次写入每一行(请参阅文档)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-10
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    • 2019-02-26
    • 2015-11-20
    • 2023-02-24
    • 1970-01-01
    相关资源
    最近更新 更多