1、文件和目录,他们本身就是我们在电脑里看到的那些一个个文件。目录在windows中就是文件夹,很好理解。
2、我们用到的大多数用途,就是利用open内建函数及其文件对象来处理文件。
3、open函数返回的文件对象有多种方法,read,readline,readlines,write,writelines,close,seek,flush(将缓存区的数据强制转移到磁盘),fileno(获取底层的文件句柄)等。
4、打开一个文件的整个步骤都是分为三步的,1、打开,同时指定打开来做什么用(比如write,read),2、对文件进行操作,可能是读,可能是写,3、关闭文件(有时可以省略,一般来说不关闭下一次调用open会出错,如果不关闭的数量过多,影响内存)。
5、有一句是这样的:
print(line, end='') #每行末尾带有一个‘\n'
其中''指的是一个空字符串,不太理解,但是记住应该就行了。
6、readline()执行时会自动迭代,就是指会自己读下一行。
7、普通的w(write)模式下,会擦除文件本身的内容,而在a(add)模式下,可以附加在文件末尾。
8、如果是处理二进制文件,加上一个b(byte),比如'wb'和'rb'。
9、二进制和文本文件,比如说图片,视频,音乐就是二进制文件,而txt就是文本文件,关键在于他们如何编码与解码。
10、文本文件也有很多种编码格式,比如Unicode(最常用),latin1,utf8,ascii,utf16。
11、不同系统间的换行符,Unix上永远是\n。而Windows时,文本模式下打开的文件,输入时\r\n会转换为\n,输出是的\n会转换为\r\n,而二进制模式下打开的文件,输入输出不会发生变化。所以在处理文本文件时,一直都是\n结尾。
12、用struct模块解析打包的二进制数据,一个模块,需要时再来看吧,感觉一般用到的不多。不过文中提到了将一个浮点型转为二进制的内容,因为曾经做过一次将二进制转为浮点型,我明白了,当浮点型数字以二进制呈现时,我们并不能直观的观察出哪个浮点型更大(但是整型可以)。
13、随机访问文件,其实就是seek(x)的调用,这里讲一个随机的概念,随机指的是可以访问任意一处,而不必从固定的文件头开始往后读取,具体概念可以参照RAM,RAM-RandomAccessMemory随机存取存储器,与地址无关,所以random指的是想访问哪里就访问哪里。
14、os模块中包含一个文件处理函数的附加集合。比如说os.open(path, flags, mode),os.read(descriptor, N), os.write(descriptor, string), os.lseek(descriptor, position, how),这几个知道一下就好了,看起来都是很标准的函数,用的时候再来查吧。
15、os.open里面也有模式标识符,如fdfile = os.open(r'c:\test.txt', (os.O_RDWR | os.O_BINARY))。在某些系统上,这些标识符可以让我们在打开文件时指定更高级的参数,比如唯一访问权(O_EXCL)和非阻塞模式(O_NONBLOCK),但是有些标识符不能跨平台移植,所以大多数时候我们使用内建函数。
16、看到上面的(os.O_RDWR | os.O_BINARY),我们基本就能猜到,这里的参数本质应该都是二进制的,根据后文,我们知道了,最大权限就是0o777,转换为二进制就是0b111111111,9个1。
17、os.remove与os.unlink(后者是调用在Unix下的名称)同义。在这里我们其实就可以可以知道,我们电脑硬盘中文件的本质是什么,本质是一系列有序排列的铁磁性材料,所以我们将文件删除时,其实是将这部分铁磁性材料与我们的系统解绑(当然实际上可能是擦除了一部分文件头或者是文件链接),而这部分铁磁性材料并没有从我们的硬盘中被丢出。
18、目录工具,glob模块。这个工具接受文件名模式拓展,并返回一个匹配文件名组成的列表(并非生成器)。例:glob.glob('*'),glob.glob('*.bin'),glob.glob('parts/*'),glob.glob('parts\part*)。
19、glob掉用接受shell中的常用文件名模式语法:“?”代表任意单个字符,“*”代表任意个字符,“[]”括起来的字符选集(没明白,文中注解的是:glob只是利用标准模块fnmatch来匹配名称模式。看来如果有需要的话要看fnmatch)。
20、os模块的listdir调用提供了另外将文件名称收集到Python列表的方法,调用的是一个简单的目录名字符串,比如os.listdir('.')。
21、os.popen返回换行符,在某些平台可能会对名称排序,glob.glob接受一个模式作为参数并返回带目录前缀的文件名,os.listdir需要一个简单的目录名,返回不带目录前缀的名称。glob和listdir的可移植性和结果(对跨平台而言)是相同的,listdir似乎速度最快。
22、如果用上述的方法返回的内容和我们实际想要的内容略有不同的话,我们可以使用os.path来处理。
23、python处理目录树几乎和检查单个目录一样容易。(以下)
24、os.walk访问器,被调用时需要制定目录的跟名称,然后自动从根目录开始向下遍历整个目录树。
25、os.listdir遍历,感觉不如os.walk好用。
26、在3.X版本中处理Unicode文件名。如果目录包含了可能无法正确解码的异常名称,那我就碰上了再来看,关键就是将之前处理的时候,将其作为二进制而非字符串来处理。
27、Unicode策列:文件内容和文件名。文件内容和文件名称的编码是不同的,python给两个不同的属性的设置提供了平台默认值,在windows 7中,文件内容编码默认为utf-8,文件名编码为mbcs。在大多数情况下,我们应当依赖文件名的默认Unicode API(不太明白)。