【问题标题】:How do I read the contents of a list of files in python?如何在 python 中读取文件列表的内容?
【发布时间】:2026-01-28 10:05:02
【问题描述】:

我正在尝试编写将读取文件列表并计算每个文件中特定事件发生的频率的代码。但是我在读取文件时遇到了很多麻烦。

如果我自己指定文件的名称,我已经得到了计数频率代码,但我想概括我的代码,这样我就不必每次运行脚本时都编辑它。

以下是用于打开和读取文件夹中文件的工作代码:

import os

path = "/Users/Desktop/PracticeCode/TextFiles"

for filename in os.listdir(path):
    with open(filename, 'rU') as f:
        contents = f.read()
        print(filename)
        print(contents)

我不知道“rU”是什么意思,但看到其他人使用“rU”打开列表中的文件。使用 'r' 会导致类似的错误。

我希望打印文件夹中每个文件的标题和内容,但出现以下错误。我不知道如何解决这个问题,如果有任何反馈,我将不胜感激。

我认为错误消息表明文件编码有问题。如果这是正确的,有人可以解释为什么我在明确指定文件时没有收到此错误吗?

with open(filename, 'rU') as f:
Traceback (most recent call last):
  File "counting_code_2", line 8, in <module>
    contents = f.read()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 3131: invalid start byte

编辑: 我发布了一些我一直用来开发代码的文件行。这是一个傲慢与偏见的文本文件。

古腾堡计划 EBook of Pride and Prejudice,简·奥斯汀(Jane Austen)

这本电子书可供任何人在任何地方免费使用,并且 几乎没有任何限制。您可以复制、赠送或 根据包含的 Project Gutenberg 许可条款重新使用它 阅读这本电子书或访问 www.gutenberg.org 在线

标题:傲慢与偏见

作者:简·奥斯汀

发布日期:2008 年 8 月 26 日 [电子书 #1342] 发布日期:1998 年 6 月 最后更新时间:2015 年 2 月 15 日]

语言:英语

字符集编码:ASCII

* GUTENBERG 电子书《傲慢与偏见》项目开始 *

由匿名志愿者制作

傲慢与偏见

简奥斯汀

第一章

这是一个普遍公认的真理,单身男人 财运亨通,一定要娶个老婆。

编辑 2: 在with语句之前的代码中增加了一行代码:

如果文件名 != '.DS_Store':

这已经消除了编码错误,但是在读取函数之后仍然存在缩进错误。我的编码语法好吗?

【问题讨论】:

  • 发布你正在阅读的文件的几行;回溯说存在解码错误。您可能需要将encoding 参数添加到with open(filename, 'rU', encoding='something') as f:
  • 嗯,文件显示 ASCII 但 0x80 不是 ASCII... 你确定它是纯文本文件吗?尝试使用file(shell 命令)进行检查。
  • 我注释掉了打开和读取文件的东西,只是打印了文件夹中的文件。当我通常查看我的文件夹时,有一个名为 .DS_Store 的东西不会出现。我假设我必须指定使用 endwith 函数查找 .txt 文件?

标签: python python-3.x unicode character-encoding


【解决方案1】:
  1. rU 是在newline 之前使用的已弃用方法。请改用rt。不过,这不太可能导致错误。

  2. 您的错误表明这是一个编码问题。您可能需要将encoding = [whatever encoding you used] 添加到您的open()

【讨论】:

  • 'rt' 是默认设置,因此您甚至可以完全忽略它。