码迷,mamicode.com
首页 > 编程语言 > 详细

Python基础入门-文件读写

时间:2018-01-13 17:03:12      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:中文字符   新建   打开方式   abc   指定   只读   highlight   内容   其他   

在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.readline()
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基础入门-文件读写

标签:中文字符   新建   打开方式   abc   指定   只读   highlight   内容   其他   

原文地址:https://www.cnblogs.com/fighter007/p/8279139.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!