0

我是这个学期的编程学生。在课堂上,我们一直在学习文件打开、读取和写入。

我们已经习惯a_reader了实现文件打开这样的任务。我一直在阅读我们的相关文本,我注意到我一直在使用一个 CSV 阅读器选项。

我想知道是否有更多可能的方法来打开/读取文件,因为我正在尝试在 python 及其相关内容中增加我的知识库。

编辑: 我更具体地说是指 CSV,因为这是我们目前使用的文件类型。我们已经了解了 CSV Reader 和 a_reader,下面显示了我们的一个讲座中的一个示例。

def main():
 a_reader = open('IDCJAC0016_009225_1800_Data.csv', 'rU')
 file_data = a_reader.read()
 a_reader.close()
 print file_data
main()

它可能看起来过于宽泛,但我不知道这就是为什么我要问的不仅仅是上述两种方式。如果有知道的人可以提供这些类型,那么我可以阅读和研究它们。

4

2 回答 2

0

如果您询问存储东西的位置,您将遇到的第一个接口是文件和套接字(假设网络连接就像一个文件,请参阅http://docs.python.org/2/library/socket.html)。

如果您指的是文件格式(如 csv),那么有很多!可能你自己可以想到很多,但除了 csv 之外,还有 html 文件、图片(png、jpg、gif)、存档格式(tar、zip)、文本文件(.txt!)、python 文件(.py)。名单还在继续。

于 2013-06-05T01:27:27.163 回答
0

有很多方法可以以不同的方式读取文件。

Just plainopen将获取一个文件名并将其作为一系列行打开。或者,您可以调用read()它,它会立即将整个文件读入一个巨大的字符串。

codecs.open将采用文件名和字符集,并自动将每一行解码为 Unicode。或者,同样,您可以调用read()它,它会立即读取整个文件并将其解码为一个巨大的 Unicode 字符串。

csv.reader将获取一个文件或类似文件的对象,并将其作为一系列 CSV 行读取。没有直接的等价物read()——但是你可以通过调用它来将任何序列变成一个列表list,所以list(my_reader)会给你一个行列表(每个行本身就是一个列表)。

zipfile.ZipFile将获取文件名、文件或类似文件的对象,并将其作为 ZIP 存档读取。当然,这不会逐行进行,但是您可以逐个归档文件进行归档。或者你可以做一些更有趣的事情,比如按名称搜索存档文件。

有用于读取 JSON 和 XML 文档的模块,处理二进制文件的不同方式等等。其中一些工作方式不同——例如,您可以使用一个模块将 XML 文档搜索为一棵树,或者使用不同的模块逐个元素地搜索 XML 文档。

Python 有一个相当广泛的标准库,你可以在网上找到文档。每个看起来应该能够处理文件的模块,可能都可以。

而且,除了标准库PyPI 中的内容之外,Python 包索引还有数千个附加模块。正在寻找一种阅读 YAML 文档的方法?搜索 PyPI yaml,你会找到它。

最后,Python 可以很容易地自己添加这样的东西。像这样的函数的骨架csv.reader很简单:

def reader(fileobj):
    for line in fileobj:
        yield parse_one_csv_line(line)

你可以parse_one_csv_line用任何你想要的东西来替换它,而且你有一个自定义阅读器。例如,这是一个大写阅读器:

def uppercase_reader(fileobj):
    for line in fileobj:
        yield line.upper()

实际上,您甚至可以将整个内容写在一行中:

shouts = (line.upper() for line in fileobj)

最好的事情是,只要你的阅读器一次只产生一行,你的阅读器本身就是一个类似文件的对象,所以你可以传递uppercase_reader(fileobj)csv.reader它并且它工作得很好。

于 2013-06-05T01:33:26.013 回答