操作程序文件

1.读文件
当在Python中打开一个文件时,我们就创建了一个流(stream)
要打开一个文件,使用内建的open()函数,返回一个文件流。
想要得到这个文件的所有文本行,使用readlines()函数。
readlines()函数读取文件中的每一行,然后把这行添加到一个列表中,当它读取了所有的行,它就返回列表 。
要关闭一个文件,使用close()函数。当完成任务后关闭文件是一个好习惯。
只想读取一行,用readline()函数。一旦读取完所有行,readline()函数会返回一个空的字符串。

>>> f=open('users.txt')
>>> f.readlines()
['nihao I love you\n', 'niddd I hate you\n', 'I very very happy']
>>> f.readline()
''
>>> f.close()

2.写文件,写入分为两种方法:
  1>打开一个文件,将数据添加到其末尾。
  2>擦掉文件中的内容,重新开始写入。
想打开一个文件而不清除它的内容,则需要发送一个额外的参数给open()函数,即:'r+w'(表示读写)。意味着你不仅想读文件而且想写入文件。要确保文件是一个可读可写的文件。
在这种打开方式下,当我们使用write()函数时,它会以覆盖的方式把数据写入到这个文件中,从文件开头开始覆盖。
'w'的打开方式,将会擦除文件中的所有数据。所以要更改一个文件的内容,确保先读取该文件。
writelines()函数,接受一个列表,然后把列表中的每一项写入到这个文件中。

>>> f=open('users.txt')
>>> lines=f.readlines()
>>> f.close()
>>> f=open('users.txt','w')
>>> lines[0]='nihao I hate hate you\n'
>>> f.writelines(lines)
>>> f.close()
>>> f=open('users.txt')
>>> f.readlines()
['nihao I hate hate you\n', 'niddd I hate you\n', 'I very very happy']
>>> f.close()

Python不会插入新的行,如果想要每个项目都是单独一行,需要确保一行都以'\n'结束。
想添加数据到一个文件的末尾,使用'a'模式。该模式不会覆盖这个文件,文件一打开,Python就移动到了文件末尾。

3.创建文件
前面使用的都是已经存在了的文件。如果我们试图打开一个不存在的文件,将会得到一个错误。
在这种情况下,可以使用'w+','w','a'模式,使用其中任意一种模式,若文件存在,Python会打开,若文件不存在,Python会创建它。如果这个文件确实存在,使用'w+','w'将会删掉其内容,而使用'a',该文件的内容会完整的保留。

4.用os.getcwd()函数得到当前目录,返回的是一个字符串。是返回其运行Python的路径,而不是运行的文件所在的路径。
有了当前的目录以后,使用os.listdir()函数来得到当前目录中的所有文件,只接受一条路径。返回一个列表(包括文件和目录)。
获取当前目录的快捷方式,在os.listdir()函数的字符串参数中给出一个句点即可。

>>> import os
>>> dir=os.getcwd()
>>> os.listdir(dir)
['DLLs', 'Doc', 'include', 'Lib', 'libs', 'LICENSE.txt', 'NEWS.txt', 'python.exe', 'python3.dll', 'python37.dll', 'pythonw.exe', 'Scripts', 'tcl', 'Tools', 'users.txt', 'vcruntime140.dll', '代码']
>>> os.listdir('.')
['DLLs', 'Doc', 'include', 'Lib', 'libs', 'LICENSE.txt', 'NEWS.txt', 'python.exe', 'python3.dll', 'python37.dll', 'pythonw.exe', 'Scripts', 'tcl', 'Tools', 'users.txt', 'vcruntime140.dll', '代码']

5.在目录间移动
如果我们需要处理的文件在一组嵌套目录中,可以使用os.walk()函数。
它接受一条路径,并且创建一个对象。如果使用walk的__next__()函数(在3版本以前是next()),它会返回一个数组,其中包含:目录的路径、该目录中的子目录以及该目录中的文件。

>>> import os
>>> dirs=os.walk('.')
>>> dirs.__next__()
('.', ['DLLs', 'Doc', 'include', 'Lib', 'libs', 'Scripts', 'tcl', 'Tools', '代码'], ['LICENSE.txt', 'NEWS.txt', 'python.exe', 'python3.dll', 'python37.dll', 'pythonw.exe', 'users.txt', 'vcruntime140.dll'])
>>> dirs.__next__()
('.\\DLLs', [], ['libcrypto-1_1.dll', 'libssl-1_1.dll', 'py.ico', 'pyc.ico', 'pyd.ico', 'pyexpat.pyd', 'python_lib.cat', 'python_tools.cat', 'select.pyd', 'sqlite3.dll', 'tcl86t.dll', 'tk86t.dll', 'unicodedata.pyd', 'winsound.pyd', '_asyncio.pyd', '_bz2.pyd', '_ctypes.pyd', '_ctypes_test.pyd', '_decimal.pyd', '_elementtree.pyd', '_hashlib.pyd', '_lzma.pyd', '_msi.pyd', '_multiprocessing.pyd', '_overlapped.pyd', '_queue.pyd', '_socket.pyd', '_sqlite3.pyd', '_ssl.pyd', '_testbuffer.pyd', '_testcapi.pyd', '_testconsole.pyd', '_testimportmultiple.pyd', '_testmultiphase.pyd', '_tkinter.pyd'])

返回的第一个元组是当前目录、当前目录中的子目录以及当前目录的文件。当我们再次使用__next__()函数时,会得到第一个子目录以及它的内容。再次使用,得到下一个目录。
每次walk()函数运行完,它就回到上一级,并且检查下一个子目录,如果它运行完, 会试图返回到上一级。如果检查到远行完所有目录,它抛出一个错误。

6.创建目录
os提供了两个创建目录的函数:os.makedir()和os.makedirs()。
如果只是想创建一个目录,把想要创建的目录 名称传递给os.makedir()即可。如果想在当前目录下创建一个目录,可以只传给它新的目录的名称;如果想在系统的其他地方创建一个新的目录,则需要传递一个完整的路径 。
如果想要创建几个新的目录,所有目录都嵌套在另一个目录中,使用os.makedirs()函数,它会创建当前不存在的每个目录。

7.获取文件信息
os.stat()函数,接受一个文件的路径 作为参数,返回一个元组,其中带有文件大小、最近的访问时间和最后的修改时间等文件信息,根据系统的不同可能获取到的信息也不同,但是上列是所有系统都可以得到的信息。
文件大小:存储在os.stat()对象的st_size属性中,大小以字节为单位。
文件的最后访问时间:存储在os.stat()对象的st_atime属性中
文件的最后修改时间:存储在os.stat()对象的st_mtime属性中

>>> import os
>>> stats=os.stat('users.txt')
>>> stats.st_size
58
>>> stats.st_atime
1557054954.9408655
>>> stats.st_mtime
1557056133.7426171

这些数字看上去似乎没有太大意义。这是因为时间是按照UNIX时间保存的,这是一种特殊的时间格式
在UNIX时间中,日期是按照从1970年1月1日午夜开始算起的秒数来存储的。要把它转换成人们更易读的内容,需要使用datetime库

>>> from datetime import datetime
>>> datetime.fromtimestamp(stats.st_mtime)
datetime.datetime(2019, 5, 5, 19, 35, 33, 742617)

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值