Python:从文件读取字符串与字符串字面量拼接异常问题
解决文件读取字符串拼接后仅显示文件内容的问题
嘿,我懂你遇到的糟心事了——从文本文件里读出来的字符串,和其他字符串拼接之后,居然只显示文件里的内容,后面的部分好像凭空消失了对吧?
问题根源
问题出在readlines()这个方法的行为上:它读取文件的每一行时,会把行尾的换行符\n也一并读入。比如你从file.txt里读到的内容,实际是"string1 string2 string3 \n"(注意末尾藏着的换行符)。当你把它和" word1"拼接后,得到的完整字符串是"string1 string2 string3 \n word1"。
当你用print()输出这个字符串时,换行符\n会让终端把后面的内容换到新的一行。有时候这个换行不够显眼,就会让你误以为后面的内容没被输出,其实它就在下一行呢。
解决办法
这里给你几种简单的修复方案:
1. 读取时去掉行尾的换行符
用rstrip('\n')只移除换行符,保留行末尾的空格(如果需要的话):
import random f = open("file.txt", "r") # 遍历每一行,去掉行尾的换行符 alist = [line.rstrip('\n') for line in f.readlines()] f.close() anotherlist = ['word1', 'word2'] astring = random.choice(alist) + " " + random.choice(anotherlist) print(astring)
2. 移除所有空白字符(如果不需要保留末尾空格)
如果行末尾的空格对你不重要,可以用strip()去掉所有空白字符(包括换行、空格、制表符等):
alist = [line.strip() for line in f.readlines()]
3. 读取整个文件(适用于文件只有一行的情况)
如果你的file.txt里只有一行内容,直接用read()读取整个文件,再去掉末尾的换行符:
import random f = open("file.txt", "r") content = f.read().rstrip('\n') alist = [content] f.close() anotherlist = ['word1', 'word2'] astring = content + " " + random.choice(anotherlist) print(astring)
额外建议:用with语句更安全
推荐使用with语句处理文件,它会自动帮你关闭文件,避免忘记关闭导致的问题:
import random anotherlist = ['word1', 'word2'] with open("file.txt", "r") as f: alist = [line.rstrip('\n') for line in f.readlines()] astring = random.choice(alist) + " " + random.choice(anotherlist) print(astring)
内容的提问来源于stack exchange,提问作者BabaSvoloch
相关产品推荐
相关产品推荐

