假设我有一个类似的文本文件,其中每个新字母都以新行开头:
-.H
-.e
-.l
-.l
-.o
我想编写一个代码来从每个文本行中删除一些数据(在示例中我想删除' - 。'在每个字母前面)然后连接结果回到一起形成:
Hello
这种问题的一般方法是什么?我认为可以通过以下方式解决:
f = open('hello.txt', 'r')
logs = f.readlines()
f.close()
loglist = list(map(str.strip, logs))
newlist = []
for i in range (len(loglist)):
splitLetter = loglist[i].split('.')
letter = splitLetter[-1]
newlist.append(letter)
word = ''.join(newlist)
print word
但问题是结果是一系列迭代:
H
He
Hel
Hell
Hello
我只需要最后的结果。我怎么做到的?
答案 0 :(得分:1)
您当前代码的问题在于每次迭代后都要打印。通过将print
语句移到for循环之外,它将只打印最后一次迭代。
f = open('hello.txt', 'r')
logs = f.readlines()
f.close()
loglist = list(map(str.strip, logs))
word = ''.join(l.split('.')[-1] for l in loglist)
print word
为了确保这一点有效,我使用测试文件对其进行了测试,其中包含以下文字:
-.G
-.o
-.o
-.d
-.b
-.y
-.e
并得到以下结果:
Goodbye
答案 1 :(得分:0)
只需在循环外移动打印:
for i in range (len(loglist)):
splitLetter = loglist[i].split('.')
letter = splitLetter[-1]
newlist.append(letter)
word = ''.join(newlist)
print word
答案 2 :(得分:0)
for i in range (len(loglist)):
splitLetter = loglist[i].split('.')
letter = splitLetter[-1]
newlist.append(letter)
word = ''.join(newlist)
print word
或
word = ''
for i in range (len(loglist)):
splitLetter = loglist[i].split('.')
letter = splitLetter[-1]
word += letter
print word
答案 3 :(得分:0)
word = ''.join([ l.split('.')[-1] for l in loglist ])
而不是整个for
循环应该这样做。
答案 4 :(得分:0)
您正在每一步打印结果。只需在for循环后打印。
您可以将生成器表达式用于更短的程序:
with open('hello.txt') as logs:
word = ''.join(l.strip().split('.')[-1] for l in logs)
print word
答案 5 :(得分:0)
使用with ... as
语句可以解除关闭文件的速度。它将在块结束时自动关闭。
然后,在一行中:
word = ''.join([l.strip()[-1]] for l in logs)
如果先删除字符串,则无需拆分字符串。你可以确定这封信将是最后一个索引。
完整代码:
with open('hello.txt', 'r') as logs:
word = ''.join([l.strip()[-1]] for l in logs)
print word