Read lines containing integers from a file in Python?

♀尐吖头ヾ 提交于 2019-12-18 21:35:11

问题


I have a file format like this:

9 8 1
3 4 1
...
...

Now, I want to get each line as three integers.

When I used

for line in f.readlines():
    print line.split(" ")

The script printed this:

['9', '8', '1\r\n']
['3', '4', '1\r\n']
...
...

How can I get each line as three integers?


回答1:


Using the code you have and addressing your specific question of how to convert your list to integers:

You can iterate through each line and convert the strings to int with the following example using list comprehension:

Given:

line =['3', '4', '1\r\n']

then:

int_list = [int(i) for i in line]

will yield a list of integers

[3, 4, 1]

that you can then access via subscripts (0 to 2). e.g.

int_list[0] contains 3,

int_list[1] contains 4,

etc.


A more streamlined version for your consideration:

with open('data.txt') as f:
    for line in f:
        int_list = [int(i) for i in line.split()]
        print int_list

The advantage of using with is that it will automatically close your file for you when you are done, or if you encounter an exception.

UPDATE:

Based on your comments below, if you want the numbers in 3 different variables, say a, b and c, you can do the following:

   for line in f:
       a, b, c = [int(i) for i in line.split()]
       print 'a = %d, b = %d, c = %d\n' %(a, b, c)

and get this:

    a = 9, b = 8, c = 1

This counts on there being 3 numbers on each line.

Aside:

Note that in place of "list comprehension" (LC) you can also use a "generator expression" (GE) of this form:

    a, b, c = (int(i) for i in line.split())

for your particular problem with 3 integers this doesn't make much difference, but I show it for completeness. For larger problems, LC requires more memory as it generates a complete list in memory at once, while GE generate a value one by one as needed. This SO question Generator Expressions vs. List Comprehension will give you more information if you are curious.




回答2:


with open("myfile.txt") as f:
    for line in f:
        int_list = [int(x) for x in line.split()]

You don't say what you want to do with the list of integers, there may be a better way to iterate over them, depending.

If you "need the values as three different variables," then"

a, b, c = int_list

though you could also use:

int_list[0]
int_list[1]
int_list[2]

as desired.




回答3:


line.strip().split(" ") 

would do.

more complete, with all lines still intact in one large string:

data = f.read().strip()    # loose final \n
[ int(x.split(" ")) for x in data.split('\n')]

would give you a list with answers you want for each line.




回答4:


If you wanna store the integers in three variables :

with open('data1.txt') as f:
    for line in f:
        a,b,c=(int(x) for x in line.split()) 
        print a,b,c 

output:

9 8 1
3 4 1



回答5:


This block of code should solve your problem:

f = open(filepath)
for line in f:
    intList = map(int, line.strip().split())
    print intList
f.close()


来源:https://stackoverflow.com/questions/11354544/read-lines-containing-integers-from-a-file-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!