文件读取选项查询(Python)

文件读取选项查询(Python),python,Python,这学期我是一名编程专业的学生。在课堂上,我们一直在学习打开文件、阅读和写作 我们使用了a_reader来完成这些文件打开任务。我一直在阅读我们的相关文本,我注意到我一直在使用一个CSV阅读器选项 我想知道,在我试图用python及其相关内容扩展我的知识库时,是否还有其他可能的方法来打开/读取文件 编辑: 我更具体地说是指CSV,因为这是我们目前使用的文件类型。我们已经了解了CSV阅读器和a_阅读器,下面是我们其中一次讲座的示例 def main(): a_reader = open('IDCJ

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

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

我想知道,在我试图用python及其相关内容扩展我的知识库时,是否还有其他可能的方法来打开/读取文件

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

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

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

如果您询问存放物品的位置,首先会遇到的接口是文件和套接字(假设网络连接类似于文件,请参阅)


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

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

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

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

将获取一个文件或类似文件的对象,并将其作为CSV行序列读取。没有直接等效的
read()
——但是您可以通过调用
list
将任何序列转换为列表,因此
list(my_reader)
将为您提供一个行列表(每个行本身就是一个列表)

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

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

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

而且,除了标准库中的功能外,还有数千个附加模块。正在寻找读取YAML文档的方法?在PyPI中搜索
yaml
,您将找到它

最后,Python使您自己添加类似的内容变得非常容易。类似于
csv.reader
的函数的框架如下所示:

def reader(fileobj):
    for line in fileobj:
        yield parse_one_csv_line(line)
你可以用你想要的任何东西来替换
parse\u one\u csv\u行
,你就有了一个定制的阅读器。例如,这里有一个大写字母读取器:

def uppercase_reader(fileobj):
    for line in fileobj:
        yield line.upper()
事实上,你甚至可以把整件事写在一行:

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

最好的是,只要你的阅读器一次只产生一行,你的阅读器本身就是一个类似文件的对象,所以你可以将
大写字母读取器(fileobj)
传递给
csv.reader
,它就可以正常工作。

什么是
大写字母读取器
?你能展示一些例子吗?嗨@Blender我如何提供例子?你通常如何打开文件?这属于“过于宽泛”的范畴。打开文件或使用打开的文件有几十种方法。抱歉@IgnacioVazquez Abrams我的经验有限,所以我不确定我想问的问题到底是什么。如果这让你或其他人感到恼火,请道歉。当你说模块是CSV、数学、十进制等,因为这就是我作为模块所学到的。这也意味着我写的任何脚本。也就是说,script.py因此也是一个模块?@KristoferWright:是的,尽管它们实际上被称为
csv
math
、和
decimal
。(在Windows上,您有时可以避免大写错误,但在Mac或Linux上通常不能,因此不要养成坏习惯。)此外,是的,
script.py
是一个模块。您可以将另一个名为
script2.py
的文件放在它旁边,然后编写
import script
,它将像
csv
math
一样工作。感谢我最近导入脚本的信息,以创建一个“更干净”更完善的程序。谢谢你的帮助。最后,有没有一个地方我可以去研究所有这些成千上万的模块,看看他们可以完成/做什么样的功能(可能是错误的词)。是的,我是指CSV作为一个例子。我忽略了这一点,因为我不确定我想问的问题到底是什么,但现在我编辑了这个问题(见上文),试图更具体一些