好的我正在尝试打开一个文件然后读取第一行并打印第一行。一旦我做到这一点,我打算做一个循环,为该文件的其余行重复这些步骤。我在下面写的文件中一直存在的问题是它不断打印文件中与第一行相对的所有行,并且在每行之间留下一个空格
import sys
def main():
log1 = (sys.argv[1])
log2 = (sys.argv[2])
f = open(log1, 'r')
for line1 in f:
print (line1)
main()
答案 0 :(得分:3)
好吧,您的代码完全按照您描述的问题执行:
# open file
f = open(log1, 'r')
# for each line of the file
for line1 in f:
# print the line
print (line1)
所以你可能想要的是:
import sys
def main():
log1 = sys.argv[1]
log2 = sys.argv[2]
with open(log1, 'r') as f:
# print that first line only
print (f.readline().strip('\n'))
# print the other lines
for l in f:
print(l.strip('\n'))
if __name__ == "__main__":
main()
在这里,您可以看到一些修改:
回答你的问题:
f.readline()
只打印出一次(考虑它就像是for
循环的一次迭代); l.strip('\n')
用于删除文件每行末尾的\n
字符,因此您print()
的每一行都没有双回车符;要获得相同的结果,您还可以执行print(l, end='')
,以便从print语句中删除\n
...选择您要删除的那个! ; - )作为改进代码的奖励:
with open(log1) as f:
用于使用上下文管理器,一旦您完成文件,它将关注文件flush()
和close()
; if __name__ == "__main__":
用于在您将模块作为脚本运行时自动执行main()函数 ,而不是在将其导入另一个代码时; 答案 1 :(得分:0)
我会这样做:
# if python2 uncomment next line:
# from __future__ import print_function
import sys
def main():
log1 = (sys.argv[1])
log2 = (sys.argv[2])
# context manager automatically closes file if error
# use 'U' flag for Universal readline mode (best practice)
with open(log1, 'rU') as f:
# use the next function to get the first iteration from the file generator
print(next(f))
# uncomment following lines when ready to continue:
# for line in f:
# print(line, end='')
if __name__ == '__main__':
main()