I have a text document that contains a list of numbers and I want to convert it to a list. Right now I can only get the entire list in the 0th entry of the list, but I want each number to be an element of a list. Does anyone know of an easy way to do this in Python?
1000
2000
3000
4000
to
['1000','2000','3000','4000']
7 Answers 7
To convert a Python string into a list use the str.split method:
>>> '1000 2000 3000 4000'.split()
['1000', '2000', '3000', '4000']
split has some options: look them up for advanced uses.
You can also read the file into a list with the readlines() method of a file object - it returns a list of lines. For example, to get a list of integers from that file, you can do:
lst = map(int, open('filename.txt').readlines())
P.S: See some other methods for doing the same in the comments. Some of those methods are nicer (more Pythonic) than mine
5 Comments
str.split, not string.split, the latter is obsolete anyway.readlines method. For example, you could get the same results as your last snippet with map(int, open('filename.txt')).map built-in function plus if the file is big enough iteration over file will be faster and more memory efficient than readlines: lst = [int(line) for line in open('filename.txt')]lst = [int(line) for line in open('filename.txt')] is much better (and more efficient) idiomatic Python for your second example. chuckle I should read the other comments before I post one.with open('filename.txt') as f: lst = map(int, f.readlines()) $ cat > t.txt
1
2
3
4
^D
$ python
Python 2.6.1 (r261:67515, Jul 7 2009, 23:51:51)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> l = [l.strip() for l in open('t.txt')]
>>> l
['1', '2', '3', '4']
>>>
Comments
>>> open("myfile.txt").readlines()
>>> lines = open("myfile.txt").readlines()
>>> lines
['1000\n', '2000\n', '3000\n', '4000\n']
>>> clean_lines = [x.strip() for x in lines]
>>> clean_lines
['1000', '2000', '3000', '4000']
Or, if you have a string already, use str.split:
>>> myfile
'1000\n2000\n3000\n4000\n'
>>> myfile.splitlines()
['1000', '2000', '3000', '4000', '']
You can remove the empty element with a list comprehension (or just a regular for loop)
>>> [x for x in myfile.splitlines() if x != ""]
['1000', '2000', '3000', '4000']
1 Comment
s.splitlines(), not s.split("\n") with open('file.txt', 'rb') as f:
data = f.read()
lines = [s.strip() for s in data.split('\n') if s]
Comments
You can achieve this using the splitlines() method in python
data = """1000
2000
3000
4000"""
number_list = data.splitlines()
Comments
You might need to strip newlines.
# list of strings
[number for number in open("file.txt")]
# list of integers
[int(number) for number in open("file.txt")]
3 Comments
list builtin instead of a list comprehension - list(open("myfile.txt")) -> ['1000\n', '2000\n', '3000\n', '4000\n']list(open("myfile")) is the same as open("myfile").readlines() - by default iterating over a file with use the readlines methodIf you already have a list that has been converted to a string by the str() method--like str(my_list)-- I have found that the easiest way to convert it back into a list is just to use eval(file_contents).
['1000','2000','3000','4000']? Maybe[1000,2000,3000,4000]would be better?