Python 文件操作

Python011

Python 文件操作,第1张

open(filename[,mode,encoding="编码"]) :第一个参数文件名如果不加路径,默认在该py文件目录下(路径举例: E:/XXX或E:\\xxx ),第二个是模式,默认为 'r' ——只读,举例: f = open('E:/abc.txt') ,如果要转编码并写入模式:

f = open('E:/abc.txt','w',encoding='utf-8')

1. 模式

2. 方法

(1) close() : 关闭文件,因为文件写入时是写在内存,只有关闭时才写入硬盘,所以写完记得关闭

(2) read(size = -1) :读取文件size个字符,不写默认是-1,此时读取所有内容(换行按\n来表示,很不好看),并作为字符串返回,一定要注意 读完以后文件指针将会指向末尾 ,所以下一次在用read方法时会发现读取不出内容了,所以这个就要用seek移动指针或者关闭文件重新定义

(3) tell() :返回当前文件指针指向的位置

(4) seek(offset,from) :移动文件指针,代表从from参数开始偏移offset个字节,0代表起始位置,1代表当前位置,2代表文件末尾

(5) readline() :按序列读取一行内容,默认\n为边界

(6) write() :写入内容,但必须要有写入权限才行,否则报错,写完会返回写入的长度,例如: len1 = f.write('abc') ,此时len1就为3

(7) truncate() :删除内容,把当前指针以后的内容全删了,举例:

注:

1.文件还可以转化为 list 之类的,例如: list1 = list(f) ,此时文件内容的按\n被隔开,然后可以用for语句读取文件所有内容,举例:

2.上面输出文件内容方法相对低效,所以一般都直接用for输出整个文件,举例:

通过 fileno 函数,我们可以查看一个文件对应的文件描述符,对应的是程序中打开的文件序号,举例:

可以看出python在启动时会先启动标准流的文件(文件描述符分别为:0/1/2),所以之后打开的文件就从3开始递增,当释放一个文件资源时,该描述符序号被释放,之后打开的文件可以继续使用该序号的文件描述符

python中的 print 的本质是通过 sys.stdout 来进行内容输出,而 sys.stdout 的本质是一个"文件",相当于我们所有的输入输出的本质都是在对 sys.stdin / sys.stdout / sys.stderr 这些文件来进行读写操作,举例:

open 函数不仅可以打开本地文件,也可以打开文件描述符,而该参数默认为 True ,代表 close 后会将对应的文件资源释放,而对于一些文件描述符,我们只是希望 close 时将打开文件描述符的对象释放,而不释放对应的文件资源,那么则可以设置 closefd=False ,举例:

需要使用到 chardet 模块,按二进制可读打开文件,然后通过 detect() 方法查看,举例:

所以就可以根据文件来设置编码了:

有时候使用文件的编码解码也可能会出现无法解析的情况,例如两种编码混在同一个文件里的时候,此时可以设置 errors 参数为 ignore 来避免该问题,示例:

可用 os 模块下的 chmod() 函数,具体参考: http://www.runoob.com/python/os-chmod.html

使用 os 模块下的 remove() 函数可以实现删除文件,举例:

可以使用自带的 zipfile 模块来进行操作,举例:

可以使用自带的 tarfile 模块来进行操作,举例:

https://www.cnblogs.com/lotusto/p/5805543.html

python3的字节流save方法用于在内存中以字节流形式保存文件。它接受一个必需的参数filename,这是要保存的文件名。可选参数append和exclusive表示除“w”模式外还应该使用什么样的文件访问模式。此方法不会关闭文件,因此如果不强制关闭,则文件将保留打开状态。

背景:工作中需要将文件夹下的若干word文件docx转换为对应txt文本格式

因此需要将docx中文本读取出来,然后保存为txt格式即可

需要的python模块为 python-docx : https://python-docx.readthedocs.io/en/latest/index.html, 导入模块时候导入docx

(只能读取.docx文件,不能读取.doc文件)

注意,在PyPi里还有一个叫docx的库,已经停止更新,不建议使用)

http://www.cnblogs.com/geek-arking/p/9300617.html

上面的方法只能读取docx文件,如果读取doc会报错

结果报错:docx.opc.exceptions.PackageNotFoundError: Package not found。还是无法识别doc

“改变拓展名并没有改变其编码方式,因此无法读取文本内容,需将doc文件用word另存为docx后再用python-docx读取其内容”

对于要转换的doc文件,网上的资料都是使用win32,需要安装 pypiwin32

https://www.cnblogs.com/AlgorithmDot/p/3386918.html

通过上面的方法,有时可以直接将doc转换为txt文件,有时候会报错。

这里我们可以考虑将doc文件直接转换为docx然后再通过上面的方法读取为txt,如果手动将doc修改为txt或者docx,打开文件会显示乱码,但是可以用其提供的SaveAs方法将.doc文档利用手动的方式“另存为”.docx文档,就能够成功打开转化后的.docx文档,

doc.SaveAs(tmp +'.docx', 16)

其中16的含义如下:

利用win32com接口直接调用office API,好处是简单、兼容性好,只要office能处理的,python都可以处理,处理出来的结果和office word里面“另存为”一致。

下面是office 2007支持的全部文件格式对应表:

wdFormatDocument = 0 

wdFormatDocument97 = 0 

wdFormatDocumentDefault = 16 

wdFormatDOSText = 4 

wdFormatDOSTextLineBreaks = 5 

wdFormatEncodedText = 7 

wdFormatFilteredHTML = 10 

wdFormatFlatXML = 19 

wdFormatFlatXMLMacroEnabled = 20 

wdFormatFlatXMLTemplate = 21 

wdFormatFlatXMLTemplateMacroEnabled = 22 

wdFormatHTML = 8 

wdFormatPDF = 17 

wdFormatRTF = 6 

wdFormatTemplate = 1 

wdFormatTemplate97 = 1 

wdFormatText = 2 

wdFormatTextLineBreaks = 3 

wdFormatUnicodeText = 7 

wdFormatWebArchive = 9 

wdFormatXML = 11 

wdFormatXMLDocument = 12 

wdFormatXMLDocumentMacroEnabled = 13 

wdFormatXMLTemplate = 14 

wdFormatXMLTemplateMacroEnabled = 15 

wdFormatXPS = 18

照着字面意思应该能对应到相应的文件格式。

1、新建或打开文件。这个比较简单用docx的Document类,若指定路径则是打开文档;若没有指定路径则是新建文档

2、保存文件。有打开,就有保存。用Document类的save方法,其中参数是保存的文件路径,或者要保存的文件流。一般指定路径即可。

doc.save(path_or_stream)

3、对象集合。python-docx包含了word文档的相关对象集合。

4、插入段落。段落是word最基本的对象之一。

5、新增样式。这个帮助文档里面说得不仔细,而且还是英文的。我手头上的项目用到这个,就自己琢磨出怎么使用,如下。

6、应用字符样式。字符自然是在段落里面的,可以采用下面方法给段落追加文字和设置字符样式。

#插入一个空白段落

p = doc.add_paragraph('')

p.add_run('123', style="Heading 1 Char")

p.add_run('456')

p.add_run('789', style="Heading 2 Char")

#这样一个段落就应用了两个字符样式,中间“456”就没应用样式

printp.text#输出结果是u'123456789' 也还是连续的

7、设置字体。当然可以不用通过设置样式对某些字进行设置,也可以直接设置。

p = doc.add_paragraph('')

r = p.add_run('123')

r.font.bold =True#加粗

r.font.italic =True#倾斜 等等...

8、表格操作。表格也是经常用到的一种对象类型。