我正在自学编程,今天的挑战是编写一个可以左右对齐文本的程序。我的主要问题是,一旦我打开文件,我不知道如何写入特定的行。是否有捷径可寻?这就是我所拥有的。我想我将需要以某种方式计算行中的字节,以便我可以f.seek到行的末尾。我觉得python已经在某个地方有这种类型的功能,但我找不到它在线搜索。有什么建议吗?
def align():
name= input('what is the name of your txt file?: ')
try:
f=open(name + '.txt','r+')
lines =f.readlines()
just = input('left, right, or centre?: ')
for i in range[,lines]:
j = lines[i].strip('\n')
if just == 'right':
f.seek() #I want it to seek each line but can't figure out what variable might go here...
f.write('{:>30}'.format(line.strip()))
elif just == 'left':
f.seek() #I want it to seek each line but can't figure out what variable might go here...
f.write('{:<30}'.format(line.strip()))
f.seek() #I want it to seek each line but can't figure out what variable might go here...
elif just == 'centre' or just == 'center':
f.write('{:^30}'.format(line.strip()))
else:
print("You didn't choose a justification!")
f.close()
答案 0 :(得分:5)
你的代码中有很多重复,它可以/应该被删除,例如,以下处理所有三种可能性:
for line in infile:
print '{:{}{}}'.format(line.strip(), align, width)
其中width
是一个数字,align
- 其中一个&lt;,&gt;或^。
关于“搜索”问题,正如其他人已经建议的那样,最好将输出重定向到另一个文件而不是“就地”重写输入文件:
with open("in.txt", 'r') as infile, open("out.txt", 'w') as outfile:
for line in infile:
outfile.write('{:{}{}}\n'.format(line.strip(), align, width))
with open(...) as var: do stuff
var = open(...)
do stuff
close(var)
与{{1}}大致相同:
{{1}}
但更不容易出错。
答案 1 :(得分:1)
不,你不能直接寻找给定的行(除非所有行都具有完全相同的长度,在这种情况下你可以计算正确的偏移量。)
你有两种方法就是阅读所有的方法
使用readlines()
立即将文件存入内存,或者逐行进行并保持计数,如下所示:
with open('data.txt') as inf:
for count, line in enumerate(inf, 1):
if count == 10:
print 'found "{}" at line 10.'.format(line)
enumerate()将自动从1开始计算
请注意,使用with
打开文件将确保文件在完成后正常关闭,或发生异常。
使用readlines()的备用方法会将整个文件读入列表,您可以通过索引访问给定的行。如果文件很大,这可能是内存问题。
获得您感兴趣的行后,您可以根据需要格式化并将其写入不同的文件。