Python基础入门-文件读写
Posted 测试老兵
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python基础入门-文件读写相关的知识,希望对你有一定的参考价值。
在python中文件读写操作应用十分广泛。比如,我们经常会读取txt获取一些信息,用来参数化操作。当然不局限于这些,关于文件读写方面的知识有很多,说一天可能都说不完,但是我们今天呢?主要跟大家分享的是python的文件读写中一些比较实用、我们经常用的知识。来,开始表演吧~~~~
在python如何创建一个文件呢?我们可以使用open()函数,这个函数里面有很多的参数,看一下它的基本结构:
open(name[, mode[, buffering]])
name : 一个包含了你要访问的文件名称的字符串值。
mode : mode 决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。
buffering : 如果 buffering 的值被设为 0,就不会有寄存。如果 buffering 的值取 1,访问文件时会寄存行。如果将 buffering 的值设为大于 1 的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。
这里面我可以简单点理解就是:open(文件路径,打开方式) 至于buffering的值我们可以先不管,以后再说。在使用open函数时,我们还需要知道一件事情,就是关于文件常用的读写方法有哪些?我们来介绍一下:
读文件:
read(N byes) 读取N个字节数
readline() 默认读取第一行,数组的形式返回
readlines() 读取所有行内容,数组的形式返回
写文件:
write() 直接写入内容 writelines() 直接向文件中写入序列字符串 换行使用 \\n a 追加文件
1.我们先用open函数创建一个文件命名为demo.py w:写模式打开文件,写模式会覆盖原文件内容,如果文件不存在则创建
filename = open(\'test.txt\',\'w\')
filename.write(‘www.baidu.com’)
filename.close()
代码解析:
1)我们使用open函数创建一个test.txt文件,我们使用的是写(w)模式创建的,这个很重要,不然无法创建文件
2)我们使用write方法向text.txt文件中写入www.baidu.com内容
3)close()用来关闭文件,文件不关闭就没有真正提交到内存中。
输出结果:
因为没有指明具体的存储路径,所以默认创建的文件是和demo.py文件在一起的。
打开文件看下内容:
看看,www.baidu.com是不是被写入到了test.txt文件中了呢?
补充一下:我们使用writelines把序列对象写入txt文本。
#写文件
f = open(\'tex.txt\',\'w\')
f.writelines([\'python\',\'java\',\'php\'])
f.close()
#读文件 我们使用的是readlines 下面还会有具体的介绍
f = open(\'tex.txt\',\'r\')
print f.readlines()
输出结果:
[\'pythonjavaphp\']
温馨提示:writelines()只能将序列写入文件中,不是序列是会报错的,我看一个报错的例子。
f = open(\'tex.txt\',\'w\')
f.writelines([1,234,\'php\'])
f.close()
f = open(\'tex.txt\',\'r\')
print f.readlines()
我们把刚才的python换成了常量 1,234 看一下输出的结果:
File "E:/Project_case/demo.py", line 79, in <module>
f.writelines([1,234,\'php\'])
TypeError: writelines() argument must be a sequence of strings
程序是不是报错了呢~~~切记!!!
2.我们如何读取文件中的内容呢?读取文件的方式是读(r)模式,来看下刚才的例子。
#写文件
filename = open(\'test.txt\',\'w\')
filename.write(\'www.baidu.com\')
filename.close()
#读文件
read_file = open(\'test.txt\',\'r\')
result = read_file.read()
print result
代码解析,我们写文件使用的是open函数,模式采用的是r(读模式),读取的方式是read()默认读取全部内容。输出结果如下:
www.baidu.com
在看看使用readlines的读取结果呢?
#写文件
filename = open(\'test.txt\',\'w\')
filename.write(\'www.baidu.com\')
filename.close()
#读文件
read_file = open(\'test.txt\',\'r\')
result = read_file.readlines()
print result
也是读取第一行,因为test.txt文件中只有一行内容。而readline默认只读一行内容。我们继续看看使用readlines读取文件的结果是怎么样的?这回我们在test,txt文件中多加几行内容。我们复制了7次www.baidu.com,然后使用readlines读test.txt文件,看下面的代码:
#读文件
read_file = open(\'test.txt\',\'r\')
result = read_file.readlines()
print result
输出结果如下:
[\'www.baidu.com\\n\', \'www.baidu.com\\n\', \'www.baidu.com\\n\', \'www.baidu.com\\n\', \'www.baidu.com\']
将所有内容存储到列表中返回出来给我们。但是又一个\\n太恶心了为啥呢?因为我们每一行的内容读完以后都进行了换行的操作,直接把换行符打印出来了。拿能不能去掉这个该死的\\n呢?答案是当然可以了。继续往下看:
#读文件
read_file = open(\'test.txt\',\'r\')
result = read_file.readlines()
for i in result:
print i.strip(\'\\n\')
strip函数的作用是将取出来的内容去掉换行符操作。输出结果如下:
www.baidu.com
www.baidu.com
www.baidu.com
www.baidu.com
www.baidu.com
3.向文件中追加内容,使用a模式,这种方式不会覆盖文件原来内容。首先我们要有存在的内容。来看一端代码小片段:
#读文件
#test.txt文件中是有内容的,我们在此基础上继续追加内容。
read_file = open(\'test.txt\',\'a\')
read_file.write(\'zhangshan\' + \'lishi\' + \'meiguo\')
read = open(\'test.txt\',\'r\')
print read.readlines()
输出结果如下:
[\'welcome to china\',\'zhangshanlishimeiguo\']
4.换行在尾部追加内容如下:
read_file = open(\'test.txt\',\'a\')
read_file.write(\'\\n\' + \'zhangshan\' + \'lishi\' + \'meiguo\')
read = open(\'test.txt\',\'r\')
print read.readlines()
输出结果:
[\'\\n\', \'zhangshanlishimeiguo\']
5.如果我们打开一个不存的文件,系统会抛出错误。看如下代码:
read = open(\'abc.txt\',\'r\')
print read.readlines()
输出报错信息如下:
Traceback (most recent call last):
File "E:/Project_case/demo.py", line 79, in <module>
read = open(\'abc.txt\',\'r\')
IOError: [Errno 2] No such file or directory: \'abc.txt\'
6.我们看一下文件的内建属性
file()方法 用于新建文件(和open作用一样)
.name()方法 用来获取文件名字
.closed() 检查文件是否关闭成功 成功返回True 错误返回False
.close()方法 关闭文件
代码实例:
fn = file(\'t1.txt\',\'w\') 新建文件
fn.write(\'asdf\') 写入asdf
f = open(\'t1.txt\',\'r\') 读取文件
print f.closed 检查是否成功关闭
print f.readlines() 打印所有行数
运行结果:
False
[\'asdf\']
7.不需要检查文件关闭的读写文件方法:
with open(\'test1.txt\',\'w\') as f:
f.write(\'hellozhongguo\')
f.close()
print f.closed
返回结果:
True
我们使用with open(文件名,‘读写方式’) as f:的方式进行创建文件在读取文件。
源码实例:
#创建文件
with open(\'test1.txt\',\'w\') as f:
f.write(\'hellozhongguo\')
f.close()
print f.closed
#读取文件
with open(\'test1.txt\',\'r\') as f:
read_type = f.readlines()
print read_type
输出结果:
True
[\'hellozhongguo\']
我们继续来一个例子加深对第二种方式的理解:
from datetime import datetime
#写文件
with open(\'test.txt\', \'w\') as f:
f.write(\'今天是 \')
f.write(datetime.now().strftime(\'%Y-%m-%d\'))
使用datetime获取当前时间,并且写入到文件中,然后进行文件的读取。
#读文件
with open(\'test.txt\', \'r\') as f:
s = f.read()
print(\'open for read...\')
print(s)
输出结果:
open for read...
今天是 2018-01-13
这样的读写文件方式对比第一种的读取方式是不是更简单、方便呢?
8.文件读写中有关读取二进制文件的使用方法
二进制文件指定的图像、视频、包括.html格式的网页等等,那么如何使用文件读写的读取他们呢?首先我们要知道读取二进制的方式是‘wb’模式。比如我们打开一个二进制的文件一个本地的hello.jpg格式的文件。
#打开一个二进制文件
with open("E:\\\\Project_case\\\\Python_Base\\\\Read_file\\\\hello.jpg1",\'rb\') as f:
a = f.read()
print a
返回的结果是一大堆乱码。当热,我们这里只是介绍读二进制文件的这种方式。
9.读取文件中的编码设置问题
9.1)如果保存的txt文件格式为 ASN 格式的 可以通过下面的方法 输出中文内容:
with open("123.txt",\'rb\') as f:
s = f.read().decode(\'gbk\')
print s
代码解析:
1. rb 用于读取文件当然换成 r 模式也是可以的
2. .decode(\'gbk\')方式用于保证中文正常输出,因为windows的编码是GBK
3.打印文件内容
查看结果:
非Ascii码文件
1)ANSI是默认的编码方式。对于英文文件是ASCII编码
对于简体中文文件是GB2312编码(只针对Windows简体中文版,如果是繁体中文版会采用Big5码)。
如果每次都这么手动转换编码嫌麻烦(写程序怕麻烦是好事,不怕麻烦就会写出又长又难懂又没法维护的代码),
Python还提供了一个codecs模块帮我们在读文件时自动转换编码,直接读出unicode:
9.2)如何我们把txt文件的保存格式设置成 ‘utf-8’的格式,那么写法上就和上面的大有不同了。先把txt保存文件改成 (“utf-8”)然后进行读取文件中文字符。
然后使用代码进行输出:
#读取文件保存为utf-8格式的
with open("abc.txt",\'rb\') as f:
s = f.read().decode(\'utf-8\')
print s
输出结果如下:
今天是21:00
UTF-8就是在互联网上使用最广的一种unicode的实现方式。其他实现方式还包括UTF-16和UTF-32,不过在互联网上基本不用。重复一遍,这里的关系是,UTF-8是Unicode的实现方式之一。
UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。
关于文件读写内容,我们先介绍到这里。
以上是关于Python基础入门-文件读写的主要内容,如果未能解决你的问题,请参考以下文章