读取python中的选项卡式文件
我在一个.txt文件中有如下整数数据读取python中的选项卡式文件,python,file-io,Python,File Io,我在一个.txt文件中有如下整数数据 600 17 3488541 601 21 6523232 602 18 6565444 603 23 6655656 事情就是这样。文件相当大。在一个特定的程序中,我需要将一行中的每个值转换成一个整数变量,然后使用它,然后使用下一行中的值,依此类推 我已经学习了很多教程,但是没有任何东西解释如何达到我的目的 具体来说,这就是我所需要的。我有三个变量,比如a,b和c。 所有这3个变量都在while循环中初始化。在while循环的第一次执行中
600 17 3488541
601 21 6523232
602 18 6565444
603 23 6655656
事情就是这样。文件相当大。在一个特定的程序中,我需要将一行中的每个值转换成一个整数变量,然后使用它,然后使用下一行中的值,依此类推
我已经学习了很多教程,但是没有任何东西解释如何达到我的目的
具体来说,这就是我所需要的。我有三个变量,比如a
,b
和c
。
所有这3个变量都在while
循环中初始化。在while循环的第一次执行中,值必须为:
a=600
b=17
c=3488541
在第二次执行中,必须:
a=601
b=21
c=6523232
……等等。我怎么做?我是Python的初学者。工作平台是Linux
with open('file.txt') as f:
for line in f:
a, b, c = map(int, line.split())
...
但是,您可能会发现将项目留在列表中更容易。例如,如果您要将它们相加或进行其他操作,则执行<代码>求和(列表)比执行<代码>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
带有制表符分隔值的文件只是经典文件的一种方言,其中分隔符是制表符(
\t
)
令人高兴的是,Python附带了一个理解s的类
您应该使用它(并为您的值指定比a、b、c
更合适的名称)
例子:
运行:
% ./integers.py
600 17 3488541
601 21 6523232
602 18 6565444
603 23 6655656
另一种解决办法
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
您可以使用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)
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)
没有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)
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)
你试了什么?上的文档给出了几个具体的例子。我会将行
从列表转换为生成器,因为OP表示该文件非常大。我同意,我认为@kindall的答案在性能方面效果更好。