2

我在 .txt 文件中有如下整数数据。

600  17  3488541
601  21  6523232
602  18  6565444
603  23  6655656

就这样继续下去。该文件非常庞大。在一个特定的程序中,我需要将一行中的每个值放入一个整数变量中并使用它,然后使用下一行中的值,依此类推。

我已经阅读了很多教程,但没有任何内容可以解释如何实现我的目的。

具体来说,这正是我所需要的。我有三个变量,a比如说bc。所有这 3 个变量都在while-loop 中初始化。在 while 循环的第一次执行中,值必须是:

a=600
b=17
c=3488541

在第二次执行中,它必须是:

a=601
b=21
c=6523232

...等等。我该怎么做?我是 Python 的初学者。工作平台是Linux。

4

5 回答 5

7
with open('file.txt') as f:
   for line in f:
      a, b, c = map(int, line.split())
      ...
于 2012-11-28T17:50:30.860 回答
3

具有制表符分隔值的文件只是经典逗号分隔值 (CSV)文件的一种方言,其中分隔符是制表符 ( \t)。

令人高兴的是,Python 附带了一个可以理解dialect的。csv.reader class

您应该使用它(并为您的值提供比 更合适的名称a, b, c)。

例子:

% cat ./integers.py 
#!/usr/bin/env python

import csv
csv.register_dialect('tsv', delimiter='\t', quoting=csv.QUOTE_NONE)
with open('integers.txt', 'r') as integers:
    reader = csv.reader(integers, 'tsv')
    for row in reader:
        paper, student, score = (int(column) for column in row)
        print paper, student, score

跑步:

% ./integers.py   
600 17 3488541
601 21 6523232
602 18 6565444
603 23 6655656
于 2012-11-28T17:54:05.153 回答
2
with open("filename.txt") as input_file:
    for line in input_file:
        a, b, c = map(int, line.split())
        # do something with a, b, c here

但是,您可能会发现将项目留在列表中更容易。例如,如果您将它们相加或其他什么,它sum(list)比更容易做a + b + c,并且如果您需要它用于具有三个以上字段的文件,则可以更好地扩展。对于这种事情,只需执行以下操作:

with open("filename.txt") as input_file:
    for line in input_file:
        numbers = map(int, line.split())
        print sum(numbers)   # or whatever
于 2012-11-28T17:53:23.087 回答
0

另一种解决方案。

lines = open('data.txt').read().splitlines()
lines = [map(int, i.split()) for i in lines]
for a,b,c in lines:
    print a,b,c
于 2012-11-28T17:55:22.323 回答
0

您可以使用 csv 模块:

import csv
fcont = csv.reader(open("file_path"), delimiter="\t") #tab separated
for (row, (a, b, c)) in enumerate(fcont): #a b c are strings. you can map(int, (a, b, c))
    do_something(a, b, c)

没有 csv 模块:

f = open("file_path")
fcont = f.read().splitlines(); f.close()
for (row, rcont) in fcont:
    (a, b, c) = rcont.split("\t") #tab separated #you can map(int, (a, b, c))
    do_something(a, b, c)
于 2012-11-28T19:11:33.700 回答