Python存储值

时间:2018-07-22 02:02:08

标签: python

我有一个如下的文本文件

 99                     0                   42
 98                     0                    4
 97                     0                    5
 96                     0                   32
 95                     0                   115
 94                     0                   10
 93                     0                   16
 92                     0                    6
 91                     0                    121
 90                     0                    9

我想读取col[0]col[2]并报告col[0]if col[2] > 100

有帮助吗?

3 个答案:

答案 0 :(得分:1)

假设您的文本文件看起来像您发布它的方式,这是一种可行的方法:

首先,我们从您的python脚本中访问文本文件。通过以withTimestamps()模式打开它,我们逐行迭代它。对于每一行,我们使用字符串方法read将其分区为默认的空格或制表符分隔符(如文件中所示)。然后,我们检查您提到的条件是否成立,如果是,则进行报告。 奖励:我们会处理错误,因此有一些丢失数据的错误行不会停止整个程序(尽管如此,但是,如果您打算在函数中使用此代码,则仍应将其包装在try-except块中)。

string.split()

Python> = 3.8 :在此版本中,我们可以利用with open("text-file.txt", 'r') as infile: for line in infile: parts = line.split() try: if int(parts[2]) > 100: print(parts[0]) except IndexError as err: print(err) 赋值运算符使循环更简洁

:=

答案 1 :(得分:1)

您的列由任意空格分隔。

虽然这是一种CSV方言,并且可以通过csv模块进行一些工作来解析,但仅在每一行调用split可能会更容易:

with open('textfile.txt') as f:
    rows = (line.split() for line in f)

现在,rows中的每一行将是三个字符串的列表。但是您还需要将这些字符串转换为数字:

    numbers = ([int(col) for col in row] for row in rows)

现在,您只需要第2列为> 100的行,因此:

    bignumbers = (row for row in numbers if row[2] > 100)

并且您只希望这些行中的每一行的第一列:

    values = (row[0] for row in bignumbers)

现在您想将它们打印出来,每行一个:

    print(*values, sep='\n')

如果您不理解这些生成器表达式,则可以将整个内容分解为一个循环:

with open('textfile.txt') as f:
    for line in f:
        row = line.split()
        numbers = []
        for col in row:
            numbers.append(int(col))
        if numbers[2] > 100:
            value = numbers[0]
            print(value)

您当然可以压缩任何一个版本以使其更加简洁。例如:

with open('textfile.txt') as f:
    bignumbers = (row for row in map(str.split, f) if int(row[2]) > 100)
    print(*(int(row[0]) for row in bignumbers), sep='\n')

with open('textfile.txt') as f:
    for line in f:
        row = line.split()
        if int(row[2]) > 100:
            print(int(row[0]))

答案 2 :(得分:1)

您可以阅读每一行,并且如果第3列大于100,则仅打印第1列:

"yay"

哪个给:

threshold = 100

with open('file.txt') as in_file:
    for line in in_file:
        col1, _, col3 = line.split()

        if int(col3) > threshold:
            print(col1)

正如@abarnert在评论中所评论的那样,您还可以更加安全,并在每行中拆分项目时包括95 91

str.strip()

str.strip()删除开头和结尾的所有空格,包括空格,制表符,换行符和回车符。保留它没有任何害处,并且允许您的程序处理插入到文件中的意外的空白。

对于您而言,这不会有任何影响,但是将其包括在内当然不会有任何伤害。如果有人可以提出需要的情况,我很乐意将其添加到此答案中。