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基础入门-文件读写的主要内容,如果未能解决你的问题,请参考以下文章

Python零基础入门(12)-------文件读写

Python入门教程之文件读写操作知识

Python基础入门自学——22--异步IO

小迪安全 Web安全 基础入门 – 第十三天 – PHP开发 – 个人博客项目&文件操作类&编辑器&上传下载删除读写

快速入门Python中文件读写IO是如何来操作外部数据的?

《C#零基础入门之百识百例》(九十六)本地数据交互 -- 读写Excel表格文件