我有一个python程序,要求用户将文本粘贴到它以处理各种任务。像这样:
line =(输入(“在此处粘贴文字:”))。lower()
粘贴的文本来自.txt文件。为了避免代码出现任何问题(因为文本包含多个引号),用户必须执行以下操作:键入3个引号,粘贴文本并再次键入3个引用marls。
通过让python读取.txt可以避免以上所有问题吗?如果是的话,怎么样?
如果问题有意义,请告诉我。
答案 0 :(得分:1)
您可以使用以下内容:
with open("file.txt") as fl:
file_contents = [x.rstrip() for x in fl]
这将导致变量file_contents
成为一个列表,其中列表的每个元素都是文件的一行,并且末尾的换行符被剥离。
如果要遍历文件的每一行,可以执行以下操作:
with open("file.txt") as fl:
for line in fl:
# Do something
rstrip()
方法删除字符串末尾的空格,它对于删除换行符很有用。
答案 1 :(得分:1)
在Python2中,只需使用raw_input作为字符串接收输入。用户不需要额外的引号。
line=(raw_input("Paste text here: ")).lower()
请注意input相当于
eval(raw_input(prompt))
并将eval
应用于用户输入是危险的,因为它允许用户评估任意Python表达式。恶意用户可以删除文件甚至run arbitrary functions,所以永远不要在Python2中使用input
!
在Python3中,input
的行为与raw_input
相似,因此您的代码就可以了。
如果您希望用户输入文件名,那么
filename = raw_input("Text filename: ")
with open(filename, 'r') as f:
line = f.read()
<强>故障排除:强>
啊,我正在使用Python3。当您以r
模式打开文件时,Python会尝试将文件中的bytes
解码为str
。如果未指定编码,则使用locale.getpreferredencoding(False)
作为默认编码。显然,这不是您的文件的正确编码。如果您知道文件使用的编码,最好为其提供encoding
参数:
open(filename, 'r', encoding=...)
或者,一种不太令人满意的hackish方法是忽略解码错误:
open(filename, 'r', errors='ignore')
第三个选项是将文件读取为字节:
open(filename, 'rb')
当然,这有一个明显的缺点,那就是你要处理像\x9d
这样的字节而不是·
这样的字符。
最后,如果您想要帮助猜测文件的正确编码,请运行
with open(filename, 'rb') as f:
contents = f.read()
print(repr(contents))
并发布输出。