使用txt文件作为python的输入

使用txt文件作为python的输入,python,text,Python,Text,我有一个python程序,需要用户将文本粘贴到该程序中,以将其处理为各种任务。像这样: 行=(输入(“在此处粘贴文本:”).lower() 粘贴的文本来自.txt文件。为了避免代码出现任何问题(因为文本包含多个引号),用户必须执行以下操作:键入3个引号,粘贴文本,然后再次键入3个引号 让python读取.txt可以避免上述所有情况吗?如果是,怎么做 请告诉我这个问题是否有意义。您可以使用以下选项: with open("file.txt") as fl: file_contents =

我有一个python程序,需要用户将文本粘贴到该程序中,以将其处理为各种任务。像这样:

行=(输入(“在此处粘贴文本:”).lower()

粘贴的文本来自.txt文件。为了避免代码出现任何问题(因为文本包含多个引号),用户必须执行以下操作:键入3个引号,粘贴文本,然后再次键入3个引号

让python读取.txt可以避免上述所有情况吗?如果是,怎么做


请告诉我这个问题是否有意义。

您可以使用以下选项:

with open("file.txt") as fl:
    file_contents = [x.rstrip() for x in fl]
这将导致变量
file\u contents
成为一个列表,其中列表的每个元素都是文件的一行,末尾去掉了换行符

如果要迭代文件的每一行,可以执行以下操作:

with open("file.txt") as fl:
    for line in fl:
        # Do something
rstrip()。用户不需要额外的引号

line=(raw_input("Paste text here: ")).lower()
请注意,这相当于

eval(raw_input(prompt))
eval
应用于用户输入是危险的,因为它允许用户计算任意Python表达式。恶意用户可以删除文件,甚至永远不要在Python2中使用
input

在Python3中,
input
的行为类似于
raw\u input
,因此在那里您的代码会很好

如果您希望用户键入文件名,则

filename = raw_input("Text filename: ")
with open(filename, 'r') as f:
    line = f.read()

故障排除:

啊,我知道你在用蟒蛇3。在
r
模式下打开文件时,Python会尝试将文件中的
字节
解码为
str
。如果未指定编码,则使用
locale.getpreferredencoding(False)
作为默认编码。显然,这不是您文件的正确编码。如果您知道文件使用的是什么编码,最好为其提供
encoding
参数:

open(filename, 'r', encoding=...)
或者,一种不太令人满意的黑客方法是忽略解码错误:

open(filename, 'r', errors='ignore')
第三个选项是以字节形式读取文件:

open(filename, 'rb')
当然,这有一个明显的缺点,那就是您将处理像
\x9d
这样的字节,而不是像
·
这样的字符

最后,如果您想获得一些帮助来猜测文件的正确编码,请运行

with open(filename, 'rb') as f:
    contents = f.read()
    print(repr(contents))

并发布输出

好的,这很有吸引力,但是我得到了以下信息:回溯(最近一次调用):文件“C:\Users\rodrigof\Desktop\py\Experience with text.py”,第18行,in line=f.read()文件“C:\Python33\lib\encodings\cp1252.py”,第23行,in decode return codecs.charmap\u decode(输入,self.errors,decoding\u table)[0]UnicodeDecodeError:“charmap”编解码器无法解码1755位的字节0x9d:字符映射到第18行is:line=f。read()我认为这是因为文本中包含以下内容:·有没有忽略未知字符的方法?我已经发布了一些关于如何处理上述问题的建议。