【问题标题】:How to read a file line by line, then print the line if it contains a string with a range of value in Python?如何逐行读取文件,然后打印该行,如果它包含 Python 中具有值范围的字符串?
【发布时间】:2013-10-27 10:05:18
【问题描述】:

我是 Python 2.7 的新手,我仍在努力掌握它。

我有一个包含一行行的文本文件,其中包含如下字符串:

"AA,,BB,2014-02-06,0,0|CC,,DD,2014-02-27,0,0|EE,,FF,2014-02-04,1,1"#"GG"#"USD"#"true"#Total : USD#1638.93#

(“USD”前面有一堆文字,每行不同。)

我试过这样做:

with open('out_put_usjfk50.csv', 'rb') as f:
    reader = csv.reader(f, delimiter='#')
    for row in reader:
        amount = float(row[5])
        if amount <= 800:
            print row
        elif amount is None:
            pass

但我遇到了同样的错误:ValueError: could not convert string to float:

我被难住了。我如何遍历每一行以检查整数值(这是字符串的一部分),然后如果它小于 1500 美元,则打印该行?如果有人能指出正确的方向,我将不胜感激!

【问题讨论】:

  • 美元前面的文字是否包含数字?
  • 确实如此,但数字指的是日期。例如:2014-02-27
  • @jrd1 我已经添加了整行。很抱歉!
  • 是整行,这样切换分隔符吗?
  • 啊,第一列被引用了,它本身就是一个逗号分隔(嵌套)的类似 CSV 的行。

标签: python python-2.7 csv


【解决方案1】:

您有一个 CSV 文件;使用csv module:

import csv

with open('filename.csv', 'rb') as f:
    reader = csv.reader(f, delimiter='#')
    for row in reader:

新建每个row 对象是一个字符串列表;每个字符串代表文件中的一列。

假设'1638.93' 列是第 8 列,那么您将使用(Python 使用基于 0 的索引):

amount = float(row[7])

现在您从该字符串中获得了一个浮点数,您可以对其进行测试:

with open('filename.csv', 'rb') as f:
    reader = csv.reader(f, delimiter='#')
    for row in reader:
        amount = float(row[7])
        if amount <= 1500:
            print row

【讨论】:

  • 啊,这很有道理!我从没想过 # 可以是分隔符,因此我不知道它可以用作 CSV 文件。我在原始问题中添加了整行,并使用了row[5],但由于某种原因,出现了这个错误:ValueError: could not convert string to float:
  • @Infection:您确定 所有 行在第 6 列中都有浮点值吗?
  • @Infection:尝试打印 just row[5],或在 amount = .. 行周围使用 try:except ValueError: print row[5] 异常处理程序进行调试。
  • 啊,你提出了一个很好的观点。我只是再次梳理了文件。实际上,并非 所有 行都有浮点值。有时它是空的,即:#"true"#Total : #
  • @Infection:那么它可能是amount = float(row[5]) if row[5] else 0,或者类似的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-17
  • 2019-04-11
  • 2019-01-29
  • 2014-06-25
  • 1970-01-01
  • 2013-12-08
  • 1970-01-01
相关资源
最近更新 更多