0

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

line=(input("Paste text here: ")).lower()

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

可以通过让 python 读取 .txt 来避免上述所有情况吗?如果是这样,如何?

请让我知道这个问题是否有意义。

4

2 回答 2

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()方法消除了字符串末尾的空格,对于消除换行符很有用。

于 2013-08-08T02:50:56.983 回答
1

在 Python2 中,只需使用raw_input将输入作为字符串接收。用户不需要额外的引号。

line=(raw_input("Paste text here: ")).lower()

请注意,输入等效于

eval(raw_input(prompt))

并且应用于eval用户输入是危险的,因为它允许用户评估任意 Python 表达式。恶意用户可以删除文件甚至运行任意函数,所以千万不要input在 Python2 中使用!

在 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=...)

或者,一种不太令人满意的骇人听闻的方法是忽略解码错误:

open(filename, 'r', errors='ignore')

第三种选择是将文件作为字节读取:

open(filename, 'rb')

当然,这有一个明显的缺点,那就是您将处理字节之类的\x9d而不是字符之类的·.

最后,如果您需要帮助猜测文件的正确编码,请运行

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

并发布输出。

于 2013-08-08T02:55:57.087 回答