如何修改文件,使每一行的字符数相同?
How to modify file so that each line is the same number of characters long?
我有一个包含多行数据的文本文件。在我可以将它传递到下游之前,我需要每一行都具有相同数量的字符。
我有一个 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 个字符,但没有像我期望的那样在较短的行的末尾添加空格。
您用尽了文件迭代器;当您尝试写入时,文件中没有任何内容可供访问。如果您费心去追踪执行过程,您就会看到这一点。请参阅这个可爱的 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
对象定义的迭代器起作用;您可以将其视为 one-use theme-park 遍历文件,在您点击 with open
语句时设置。
if len(line) > longest:
longest = len(line)
我删除了 else: pass
因为它没有任何作用。
此处,在离开 for
循环时,文件描述符的 "bookmark" 位于文件末尾。
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
块。然后重新制作一个专门用于写作的。请注意,您需要一个新的输出文件,或者您需要保留第一次阅读的输入。你的目的是覆盖原文件,这意味着你不能同时阅读它。
如果这仍然令人困惑,请阅读一些关于文件处理的教程。
我有一个包含多行数据的文本文件。在我可以将它传递到下游之前,我需要每一行都具有相同数量的字符。
我有一个 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 个字符,但没有像我期望的那样在较短的行的末尾添加空格。
您用尽了文件迭代器;当您尝试写入时,文件中没有任何内容可供访问。如果您费心去追踪执行过程,您就会看到这一点。请参阅这个可爱的 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
对象定义的迭代器起作用;您可以将其视为 one-use theme-park 遍历文件,在您点击 with open
语句时设置。
if len(line) > longest:
longest = len(line)
我删除了 else: pass
因为它没有任何作用。
此处,在离开 for
循环时,文件描述符的 "bookmark" 位于文件末尾。
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
块。然后重新制作一个专门用于写作的。请注意,您需要一个新的输出文件,或者您需要保留第一次阅读的输入。你的目的是覆盖原文件,这意味着你不能同时阅读它。
如果这仍然令人困惑,请阅读一些关于文件处理的教程。