How do you read a file into a list in Python?
我想提示用户生成一些随机数并保存到一个文件中。他给了我们那部分。我们需要做的部分是打开该文件,将数字转换成一个列表,然后在不使用简单的内置python工具的情况下找到平均值、标准偏差等。
我试过使用
ame\MyDocuments
umbers, 'r')
1 2 | with open('C:/path/numbers.txt') as f: lines = f.read().splitlines() |
这将给您一个文件中的值(字符串)列表,去除换行符。
另外,注意Windows路径名中的反斜杠,因为它们也是字符串中的转义字符。您可以使用正斜杠或双反斜杠代替。
在python中将文件读取到列表中的两种方法(注意,这两种方法都不是或-
1。使用
这是打开和读取文件的方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #Sample 1 - elucidating each step but not memory efficient lines = [] with open("C: ame\MyDocuments umbers") as file: for line in file: line = line.strip() #or some other preprocessing lines.append(line) #storing everything in memory! #Sample 2 - a more pythonic and idiomatic way but still not memory efficient with open("C: ame\MyDocuments umbers") as file: lines = [line.strip() for line in file] #Sample 3 - a more pythonic way with efficient memory usage. Proper usage of with and file iterators. with open("C: ame\MyDocuments umbers") as file: for line in file: line = line.strip() #preprocess line doSomethingWithThisLine(line) #take action on line instead of storing in a list. more memory efficient at the cost of execution speed. |
文件的每行使用
这可能被认为是低效的,因为文件描述符可能不会立即关闭。当在打开数千个文件的函数中调用此函数时,可能是一个潜在的问题。
1 | data = [line.strip() for line in open("C:/name/MyDocuments/numbers", 'r')] |
请注意,文件关闭依赖于实现。通常未使用的变量由python解释器垃圾收集。在cpython(python.org的常规解释器版本)中,它将立即发生,因为它的垃圾收集器通过引用计数工作。在另一个解释器中,比如Jython或Ironpython,可能会有延迟。
1 2 | f = open("file.txt") lines = f.readlines() |
看看这里。
如Joaquin所说,不要忘记
将strint转换为整数很容易:
阅读文件并将每一行放在列表中的方法:
1 2 3 | from __future__ import with_statement #for python 2.5 with open('C:/path/numbers.txt', 'r') as f: lines = f.readlines() |
然后,假设每行包含一个数字,
1 | numbers =[int(e.strip()) for e in lines] |
您需要将文件名字符串传递给
ame\MyDocuments
umbers'
编辑:对问题的编辑使它与原版完全不同,因为它们都不是来自原版海报,所以我不确定它们是否被版权保护。然而,它确实指出了一个可能被忽略的明显问题,那就是如何将"我的文档"添加到文件名中。
在英文版的WindowsXP中,
ame\My Documents
1 2 3 | open(r"C:\Documents and Settings ame\My Documents umbers", 'r') |
我猜你使用XP是因为你称它为
1 2 3 | hdl = open("C:/name/MyDocuments/numbers", 'r') milist = hdl.readlines() hdl.close() |
总结一下人们所说的话:
1 2 3 | f=open('data.txt', 'w') # will make a new file or erase a file of that name if it is present f=open('data.txt', 'r') # will open a file as read-only f=open('data.txt', 'a') # will open a file for appending (appended data goes to the end of the file) |
如果您希望有类似于尝试/捕获的内容
1 2 3 | with open('data.txt') as f: for line in f: print line |
我认为@movieyoda code可能是你应该使用的。
如果每行有多个数字,并且有多行,可以这样读取:
1 2 3 4 5 6 | #!/usr/bin/env python from os.path import dirname with open(dirname(__file__) + '/data/path/filename.txt') as input_data: input_list= [map(int,num.split()) for num in input_data.readlines()] |