我有一个包含数据行的文本文件。在将其传递到下游之前,我需要每行具有相同数量的字符。
我有一个python脚本,可以找到文件中最长的行,并且正在尝试使用ljust函数使每一行达到该长度。
args=parse_args()
readfile = args.inputfile
#find the longest line in the file, and set that as longest
longest = 0
#open the file up
with open(str(args.inputfile).strip('[]').strip("''")) as readfile:
#find the longest line in the file and make note of how long.
for line in readfile:
if len(line) > longest:
longest = len(line)
else:
pass
print("The longest line is " + str(longest) + " characters long. ")
#make each line exactly that long
for line in readfile:
readfile.write(line.ljust(longest)) #make it longest long and fill with spaces.
readfile.close()
问题是文件没有任何反应。脚本输出最长的行是31个字符,但是像我期望的那样,在较短的行末没有添加空格。
答案 0 :(得分:1)
您已经用尽了文件迭代器;当您尝试编写时,文件中没有任何东西可供访问。如果您不愿跟踪执行情况,您将已经看到了。请访问这个可爱的debug博客以获取帮助。
特别是让我们看一下循环。
#open the file up
with open(str(args.inputfile).strip('[]').strip("''")) as readfile:
#find the longest line in the file and make note of how long.
for line in readfile:
此for
语句通过file
对象的已定义迭代器起作用;您可以将其视为一次使用主题公园游玩的文件,该文件是在您点击with open
语句时设置的。
if len(line) > longest:
longest = len(line)
我删除了else: pass
,因为它没有任何作用。
在这里,离开for
循环时,文件描述符的“书签”位于文件的末尾。
print("The longest line is " + str(longest) + " characters long. ")
#make each line exactly that long
for line in readfile:
您将不会输入此代码;书签已经在代码末尾。没有什么要看的了。您会收到EOF响应并完全跳过循环。
readfile.write(line.ljust(longest)) #make it longest long and fill with spaces.
readfile.close()
修复非常简单:仅使用第一个块来确定最大行长。完全退出with
块。然后制作一个专门用于写作的新书。请注意,您需要一个新的输出文件,或者需要保留第一次阅读时的输入。您的目的是覆盖原始文件,这意味着您无法同时读取它。
如果这仍然令人困惑,那么请完成一些有关文件处理的教程。