文件路径python
文件有两个关键属性:“文件名”和“路径”。路径指明了文件在计算机上的位置。mysql
在windows上,路径书写使用倒斜杠做为文件夹之间的分隔符。但在OS X和Linux上,使用正斜杠做为它们的路径分隔符。若是想要程序运行在全部操做系统上,在编写python脚本时,必须处理这两种状况。sql
若是将单个文件和路径上的文件夹名称的字符串传递给os.path.join()函数,它会返回一个文件路径的字符串,包含正确的路径分隔符。windows
>>> import os >>> os.path.join('usr','local','src','mysql') 'usr/local/src/mysql'
全部没有从根文件夹开始的文件名或路径,都假定在当前工做目录下。利用os.getcwd()函数,能够取得当前工做路径的字符串,并能够利用os.chdir()改变它。bash
若是要更改的当前工做目录不存在,python就会显示一个错误。ssh
>>> import os >>> os.getcwd() '/root' >>> os.chdir('/usr/local/') >>> os.getcwd() '/usr/local'
能够用os.makedirs()函数建立新目录。它会建立全部必要的中间文件夹,目的是确保完整路径名存在。tcp
>>> import os >>> os.makedirs('/tmp/newdir')
绝对路径和相对路径编辑器
▎有两种方法指定一个文件路径:ide
“绝对路径”,老是从根文件夹开始。函数
“相对路径”,它相对于程序的当前工做目录。
"."用做文件夹目录名称时,是“这个目录”的缩写。
".."的意思是父文件夹。
>>> os.getcwd() '/usr/local' >>> os.chdir('./src') >>> os.getcwd() '/usr/local/src'
os.path模块
os.path模块包含了许多与文件名和文件路径相关的有用函数。由于os.path是os模块中的模块,因此只要执行import os就能够导入它。
os.path模块提供了一些函数,返回一个相对路径的绝对路径,以及检查给定的路径是否为绝对路径。
调用os.path.abspath(path)将返回参数的绝对路径的字符串。这是将相对路径转换为绝对路径的简便方法。
调用os.path.isabs(path),若是参数是1绝对路径,就返回True,若是参数是一个相对路径,就返回False。
调用os.path.relpath(path,start)将返回从start路径到path的相对路径的字符串。若是没有提供start,就使用当前工做目录为开始路径。
>>> os.path.abspath('./src') '/usr/local/src' >>> os.path.isabs('./src') False >>> os.path.relpath('/tmp/') '../../tmp'
调用os.path.dirname(path)将返回一个字符串,它包含path参数中最后一个斜杠以前的全部内容。
调用os.path.basename(path)将返回一个字符串,它包含path参数中最后一个斜杠以后的全部内容。
若是同时须要一个路径的目录名称和基本名称,就能够调用os.path.split(),得到这两个字符串的元组。
os.path.split()不会接受一个文件路径并返回每一个文件夹的字符串的列表。
split()字符串方法将返回一个列表,包含该路径的全部部分。若是向它传递os.path.sep,就能在全部操做系统上工做。
>>> os.path.dirname('/usr/local/src/mysql') '/usr/local/src' >>> os.path.basename('/usr/local/src/mysql') 'mysql' >>> os.path.split('/usr/local/src/mysql') ('/usr/local/src', 'mysql')
调用os.path.getsize(path)将返回path参数中文件的字节数。
调用os.listdir(path)将返回文件名字符串的列表,包含path参数中的每一个文件。
>>> import os >>> os.path.getsize('/tmp/1.txt') 1100 >>> os.listdir('/tmp/') ['.font-unix', '.X11-unix', '.ICE-unix', '.Test-unix', '.XIM-unix', 'py.py', 'bigfile', 'yum_save_tx.2017-07-20.09-37.LxNivf.yumtx', 'newdir', '1.txt']
os.path模块提供了一些函数,用于检测给定的路径是否存在,以及它是文件仍是文件夹。
若是path参数所指的文件或文件夹存在,调用os.path.exists(path)将返回True,不然返回False。
若是path参数存在,而且是一个文件,调用os.path.isfile(path)将返回True,不然返回False。
若是path参数存在,而且是一个文件夹,调用os.path.isdir(path)将返回True,不然返回False。
利用os.path.exists()函数,能够肯定DVD或闪存盘当前是否连在计算机上。
>>> os.path.exists('/tmp/1.txt') True >>> os.path.isfile('/tmp/1.txt') True >>> os.path.isdir('/tmp/1.txt') False
文件读写过程
“纯文本文件”只包含基本文本字符,不包含字体、大小和颜色信息。
“二进制文件”是全部其余文件类型,诸如字处理文档、PDF、图像、电子表格和可执行程序。
▎在python中,读写文件有3个步骤:
一、调用open()函数,返回一个File对象。
二、调用File对象的read()或write()方法。
三、调用File对象的close()方法,关闭该文件。
在python中打开文件时,读模式是默认的模式。“r”表示读模式,“w”表示写模式,“a”表示添加模式。
若是传递给open()的文件名不存在,写模式和添加模式都会建立一个新的空文件。在读取或写入文件后,调用close()方法,而后才能再次打开该文件。
若是将文件内容当作是单个大字符串,read()方法就返回保存在该文件中的这个字符串。
也可使用readlines()方法,从文件取得一个字符串的列表。列表中每一个字符串就是文本的每一行。
write()方法不会像print()函数1,在字符串的末尾自动添加换行字符。必须本身添加该字符。
>>> readfile=open('/tmp/1.txt') >>> txt=readfile.read() >>> txt '123~112313213\nroot:x:0:0:root:/root:/bin/bash\nbin:x:1:1:bin:/bin:/sbin/nologin\ndaemon:x:2:2:daemon:/sbin:/sbin/nologin\nadm:x:3:4:adm:/var/adm:/sbin/nologin\nlp:x:4:7:lp:/var/spool/lpd:/sbin/nologin\nsync:x:5:0:sync:/sbin:/bin/sync\nshutdown:x:6:0:shutdown:/sbin:/sbin/shutdown\nhalt:x:7:0:halt:/sbin:/sbin/halt\nmail:x:8:12:mail:/var/spool/mail:/sbin/nologin\noperator:x:11:0:operator:/root:/sbin/nologin\ngames:x:12:100:games:/usr/games:/sbin/nologin\nftp:x:14:50:FTP User:/var/ftp:/sbin/nologin\nnobody:x:99:99:Nobody:/:/sbin/nologin\nsystemd-bus-proxy:x:999:998:systemd Bus Proxy:/:/sbin/nologin\nsystemd-network:x:192:192:systemd Network Management:/:/sbin/nologin\ndbus:x:81:81:System message bus:/:/sbin/nologin\npolkitd:x:998:997:User for polkitd:/:/sbin/nologin\ntss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin\nsshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin\npostfix:x:89:89::/var/spool/postfix:/sbin/nologin\nchrony:x:997:995::/var/lib/chrony:/sbin/nologin\ntcpdump:x:72:72::/:/sbin/nologin\njuispan:x:1000:1000::/home/juispan:/bin/bash\n' >>> readfile.close()
保存变量
利用shelve模块,能够将python程序中的变量保存到二进制的shelf文件中。这样,程序就能够从硬盘中恢复变量的数据。
shelve模块自动将对象pickle进和pickle出,等于在程序中添加“保存”和“打开”功能。
shelf值没必要用读模式或写模式打开,由于它们在打开后,既能读又能写。
shelve系统自动分隔存储记录,而且只获取和更新被访问和修改的记录。
像字典同样,shelf值有keys()和values()方法。会返回相似列表的值,而不是真正的列表。
>>> import shelve >>> shelFile=shelve.open('mydata') >>> price=[1,2,3] >>> shelFile['price']=price >>> shelFile.close() >>> shelFile=shelve.open('mydata') >>> type(shelFile) <class 'shelve.DbfilenameShelf'> >>> list(shelFile.keys()) ['price'] >>> list(shelFile.values()) [[1, 2, 3]] >>> shelFile['price'] [1, 2, 3] >>> shelFile.close()
能够用pprint.pformat()函数保存变量。
import语句导入的模块自己就是python脚本。
>>> import pprint >>> price=[1,2,3,4,5] >>> pprint.pformat(price) '[1, 2, 3, 4, 5]' >>> pFile=open('pprice.py','w') >>> pFile.write(pprint.pformat(price)) 15 >>> pFile.close()
经过导入pprice.py模块可以查看到文件内容。建立一个.py文件的好处在于,由于它是一个文本文件,因此任何人均可以用一个简单的文本编辑器读取和修改文件的内容。可是,对于大多数应用,利用shelve模块来保存数据,是将变量保存到文件的最佳方式。只有基本数据类型,诸如整型、浮点型、字符串、列表和字典,能够做为简单文本写入一个文件。