我是本学期的编程学生。在课堂上,我们一直在学习文件打开,阅读和写作。
我们已经使用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()
它可能看起来过于宽泛,但我不知道这就是为什么我要问的不仅仅是上述两种方式。如果有人知道提供类型,那么我可以阅读并研究它们。
答案 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
工作得很好。