[英]Open, read, then store lines into a list in Python
因此,我已经看到了这段代码;
with open(fname) as f:
content = f.readlines()
在另一个问题上。 我只需要对其工作方式进行一些确认即可。 如果我有一个名为normaltrack.py
的文件,其中包含代码;
wall 0 50 250 10
wall 0 -60 250 10
finish 200 -50 50 100
我应该有一个名为wall = []
的列表,并将开始代码设为;
with open(normaltrack.py) as f:
wall = f.readlines()
打开文件并将以“ wall”开头的代码行存储到列表中?
每当我想打开其他文件时,是否总是更改“ fname”? 还是可以通过口译员做到这一点? 例如python3 assignment.py <normaltrack.py吗?
在您的示例中:
with open(fname) as f:
content = f.readlines()
“ fname”是对字符串的变量引用。 此字符串是文件路径(相对或绝对)。
要读取示例文件,并生成带有“ wall”的所有行的列表,可以执行以下操作:
fname = '/path/to/normaltrack-example.txt' # this would be an absolute file path in Linux/Unix/Mac
wall = []
with open(fname) as the_file:
for line in the_file:
if line.startswith('wall'):
wall.append(line) # or wall.append(line.rstrip()) to remove the line return character
通常,最好不要在文件对象上调用“ readlines()”,除非您控制文件(也就是说,这不是用户提供的东西)。 这是因为readlines会将整个文件读取到内存中,而当文件为多个GB时,这很烂。
这是一个快速且肮脏的脚本,可以满足您的需求。
import sys
if len(sys.argv) > 1:
infile = sys.argv[1]
else:
print("Usage: {} <infile>".format(sys.argv[0]))
sys.exit(1)
with open(infile, 'r') as f:
walls = []
for line in f:
if line.startswith('wall'):
walls.append(line.strip())
如果您将此脚本命名为“ read_walls.py”,则可以从命令行这样运行它,
python read_walls.py normaltrack.py
通常,我将使用argparse解析命令行参数,并为代码编写main()函数。 (这使得它可以在交互式python解释器中进行测试。)
该代码应该为您工作
#!/usr/bin/env python
import sys
def read_file(fname):
call = []
with file(fname) as f:
call = f.readlines()
call = filter(lambda l: l.startswith('wall'), call)
return call
if __name__ == '__main__':
fname = sys.argv[1]
call = read_file(fname)
print call
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.