[Python 3系列]读写文件

文件路径

文件有两个关键属性:“文件名”和“路径”。路径指明了文件在计算机上的位置。

在windows上,路径书写使用倒斜杠作为文件夹之间的分隔符。但在OS X和Linux上,使用正斜杠作为它们的路径分隔符。如果想要程序运行在所有操作系统上,在编写python脚本时,必须处理这两种情况。

如果将单个文件和路径上的文件夹名称的字符串传递给os.path.join()函数,它会返回一个文件路径的字符串,包含正确的路径分隔符。

>>> import os
>>> os.path.join(‘usr‘,‘local‘,‘src‘,‘mysql‘)
‘usr/local/src/mysql‘

所有没有从根文件夹开始的文件名或路径,都假定在当前工作目录下。利用os.getcwd()函数,可以取得当前工作路径的字符串,并可以利用os.chdir()改变它。

如果要更改的当前工作目录不存在,python就会显示一个错误。

>>> import os
>>> os.getcwd()
‘/root‘
>>> os.chdir(‘/usr/local/‘)
>>> os.getcwd()
‘/usr/local‘

可以用os.makedirs()函数创建新目录。它会创建所有必要的中间文件夹,目的是确保完整路径名存在。

>>> import os
>>> os.makedirs(‘/tmp/newdir‘)

绝对路径和相对路径

▎有两种方法指定一个文件路径:

“绝对路径”,总是从根文件夹开始。

“相对路径”,它相对于程序的当前工作目录。

"."用作文件夹目录名称时,是“这个目录”的缩写。

".."的意思是父文件夹。

>>> 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个步骤:

1、调用open()函数,返回一个File对象。

2、调用File对象的read()或write()方法。

3、调用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模块等于在程序中添加“保存”和“打开”功能。

shelf值不必用读模式或写模式打开,因为它们在打开后,既能读又能写。

像字典一样,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模块来保存数据,是将变量保存到文件的最佳方式。只有基本数据类型,诸如整型、浮点型、字符串、列表和字典,可以作为简单文本写入一个文件。

时间: 2024-10-17 14:59:42

[Python 3系列]读写文件的相关文章

Python中如何读写文件

Python读写文件 1.open 使用open打开文件后一定要记得调用文件对象的close()方法. 比如可以用try/finally语句来确保最后能关闭文件. file_object = open('thefile.txt') try:      all_the_text = file_object.read( ) finally:      file_object.close( ) 注:不能把open语句放在try块里,因为当打开文件出现异常时, 文件对象file_object无法执行cl

Python学习系列之文件操作

Pyhton文件打开方式 with= open('文件路径','打开模式') as f:#PS:python3提供了with语句来帮我们自动调用close方法,所以说无论打开文件是否出错都能自动正确的关闭文件 Python打开文件的模式 基本模式 带'+'的模式 带'b'的模式 #提示:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型 带'+'和带'b'的模式 Python文件读取方式 Pyhton文件写入方式 Python文件操作所提供的方法 close(self) 关闭已经打

2019-1-25 python基础学习 -- 读写文件

一.文件目录: a.获取当前目录 ----- os.getcwd() 改变当前路径 ------ os.chdir() b.os.makedirs() ---- 创建新文件夹 c.os.path.abspath('.') ---- 返回当前路径的绝对路径 os.path.isabs() -----   ()里是相对路径就返回False,绝对路径返回True. d.os.path.getsize() --- 返回()路劲下文件的大小: os.listdir() ----- 返回()里路径下内容的列

python入门系列:文件操作

操作模式 r """以只读方式打开文件(默认),文件的指针会放在文件的开头若文件不存在,会报错"""f = open("a.txt", "r") # 在同级目录下打开文件content = f.read()print(content)w """以只写方式打开文件,文件的指针也在文件开头,进行覆盖写入(先清空后写入)若文件不存在,会创建一个新的文件""&quo

Python学习系列(五)(文件操作及其字典)

Python学习系列(五)(文件操作及其字典) Python学习系列(四)(列表及其函数) 一.文件操作 1,读文件 在以'r'读模式打开文件以后可以调用read函数一次性将文件内容全部读出,也可以指定每次read读多少字节,例如: 1 #coding:utf-8 2 fn='test1.py' 3 fp=open(fn,'r') #以读的方式打开文件,文件必须首先存在和,.文件在同一目录下py 4 print 'reading pos:',fp.tell() 5 r=fp.read(20) #

Python之IO编程——文件读写、StringIO/BytesIO、操作文件和目录、序列化

IO编程 IO在计算机中指Input/Output,也就是输入和输出.由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口.从磁盘读取文件到内存,就只有Input操作,反过来,把数据写到磁盘文件里,就只是一个Output操作. 由于CPU和内存的速度远远高于外设的速度,所以,在IO编程中,就存在速度严重不匹配的问题.举个例子来说,比如要把100M的数据写入磁盘,CPU输出100M的数据只需要0.01秒,可是磁盘要接收这10

Python读写文件

Python读写文件1.open使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open('thefile.txt')try:     all_the_text = file_object.read( )finally:     file_object.close( ) 注:不能把open语句放在try块里,因为当打开文件出现异常时,文件对象file_object无法执行close()方法.

转载-Python学习笔记之文件读写

Python 文件读写 Python内置了读写文件的函数,用法和C是兼容的.本节介绍内容大致有:文件的打开/关闭.文件对象.文件的读写等. 本章节仅示例介绍 TXT 类型文档的读写,也就是最基础的文件读写,也需要注意编码问题:其他文件的读写及编码相关详见专题的博文. open()   close()     with open(...) as ... 看以下示例就能了解 Python 的 open() 及 close() 函数.这边调用 read()方法可以一次读取文件的全部内容,Python把

从自动生成.h的头文件集合和类声明集合到用python读写文件

最近在用python自动生成c++的类.因为这些类会根据需求不同产生不同的类,所以需要用python自动生成.由于会产生大量的类,而且这些类是变化的.所以如果是在某个.h中要用include来加载这些类,会累死人的.所以用python来生成这些类的头文件引用和类的类名声明 先看例子,再聊python的读写文件的代码 在聊聊我的python代码 ------------------------> 好吧.上面的图就是面临的需求 下面来聊聊从网上找的读写文件的python代码吧.csdn的一个博主写的