文件阅读选项查询(Python)

时间:2013-06-05 01:23:15

标签: python

我是本学期的编程学生。在课堂上,我们一直在学习文件打开,阅读和写作。

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

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

修改 我更具体地指的是CSV,因为这是我们目前使用的文件类型。我们已经了解了CSV阅读器和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()

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

2 个答案:

答案 0 :(得分:0)

如果你问的是存放东西的地方,你会遇到的第一个接口是文件和套接字(假装网络连接就像一个文件,请参阅http://docs.python.org/2/library/socket.html)。

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

答案 1 :(得分:0)

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

简单地open将采用文件名并将其作为一系列行打开。或者,您可以在其上调用read(),它会立即将整个文件读入一个巨大的字符串。

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

csv.reader将获取一个文件或类文件对象,并将其作为一系列CSV行读取。没有直接等同于read() - 但您只需在其上调用list即可将任何序列转换为列表,因此list(my_reader)会为您提供行(每个行本身就是一个列表)。

zipfile.ZipFile将采用文件名,或文件或类文件对象,并将其作为ZIP存档读取。当然,这不是逐行的,但您可以通过归档文件归档归档文件。或者你可以做更好的事情,比如按名称搜索存档文件。

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

Python有一个非常广泛的标准库,您可以找到文档online。似乎它的每个模块都应该可以处理文件,可能就可以了。

而且,除了标准库中的内容之外,PyPI, the Python Package Index还有数以千计的附加模块。想找一种阅读YAML文件的方法吗?搜索yaml的PyPI,你会找到它。

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

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

您可以将parse_one_csv_line替换为您想要的任何内容,并且您有自定义阅读器。例如,这是一个uppercase_reader:

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

事实上,你甚至可以将整个事情写成一行:

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

最棒的是,只要您的阅读器一次只生成一行,您的阅读器本身就是一个类似文件的对象,因此您可以将uppercase_reader(fileobj)传递给csv.reader工作得很好。