所以我看过这段代码;
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?
答案 0 :(得分:1)
在你的例子中:
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时,这会很糟糕。
答案 1 :(得分:0)
这是一个快速而又脏的脚本,可以满足您的需求。
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&#39;”,则可以从命令行运行,如下所示
python read_walls.py normaltrack.py
通常,我使用argparse来解析命令行参数,并为代码编写main()函数。 (这使得它在交互式python解释器中可以测试。)
答案 2 :(得分:0)
此代码应该适合您
#!/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