标签:
今天学习python下对文件的基础操作,主要从open函数、File对象的属性、文件定位、简单操作、举例说明几个步骤开始学习,下面开始进入今天的主题:
open函数主要是打开一个文件,创建一个file对象,相关的方法可以调用它进行读写 。
语法格式如下:
| 
 1 
2 
3 
 | 
file object = open(文件名,打开文件的模式)file object  = with open (文件名,打开文件的模式) as 变量名 | 
两种语法格式的不同在于下面这种方法不用输入f.close()函数来关闭文件。
在介绍文件打开模式之前介绍两个python的函数:
计算机中一个字节是8位,那么在不同的字符编码占用的字节不同,在计算机中为了节省内存空间,汉字一般是用16进制表示,
UTF-8:一个汉字占计算机的三个字节
GBK:一个汉字占两个字节
bytes():将字符串转换成字节类型
| 
 1 
2 
3 
4 
5 
6 
7 
8 
 | 
n = bytes("你好", encoding="utf-8")      #将字符串转换成utf-8的字节码print(n)n = bytes("你好", encoding="gbk")        #将字符串转换成gbk的字节码print(n)结果:b‘\xe4\xbd\xa0\xe5\xa5\xbd‘b‘\xc4\xe3\xba\xc3‘ | 
str():可以将字节类型转换回字符串
| 
 1 
2 
3 
4 
5 
 | 
new_str = str(bytes("你好", encoding="utf-8"), encoding="utf-8")print(new_str)结果:你好 | 
下面来看一下打开文件的模式:

下面是file对象相关的所有属性的列表,举例说明这些属性的用法:

| 
 1 
2 
3 
4 
5 
6 
7 
8 
 | 
f = open(‘user.txt‘,‘a‘)print("文件名:",f.name)print("文件是否已关闭:",f.closed)f.close()结果:文件名: user.txt文件是否已关闭: False | 
      下面介绍一下file对象的方法:
1,file.read()
| 
 1 
2 
3 
4 
5 
6 
 | 
f = open(‘user.txt‘,‘r‘)print(f.read())                   # 从文件中读取出字符串结果:UserName=‘jack‘PassWord=‘123456‘ | 
2,file.readline()
| 
 1 
2 
3 
4 
5 
 | 
f = open(‘user.txt‘,‘r‘)print(f.readline())               #读取一行结果:UserName=‘jack‘ | 
3,file.readlines()
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
 | 
f = open(‘user.txt‘,‘r‘)print(f.readlines())       #把文件每一行作为一个list的一个成员,并返回这个list。结果:["UserName=‘jack‘\n", "PassWord=‘123456‘\n"]f = open(‘user.txt‘,‘r‘)for i in f.readlines():          #也可以通过循环调用readline()来实现的    print(i)结果:UserName=‘jack‘PassWord=‘123456‘ | 
4,file.write()
write()方法可将任何字符串写入一个打开的文件。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。注意:Write()方法不在字符串的结尾不添加换行符(‘\n‘):
| 
 1 
2 
3 
4 
5 
6 
7 
8 
 | 
f = open(‘user.txt‘,‘a‘)          #追加的模式打开文件f.write("age:18\n")      f.close()结果:UserName=‘jack‘PassWord=‘123456‘age:18 | 
5,file.writelines()
用于向文件中写入一序列的字符串。这一序列字符串可以是由迭代对象产生的,如一个字符串列表;
换行需要制定换行符 \n。
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
 | 
f = open(‘user.txt‘,‘a‘)print("文件名:",f.name)seq = ["age=19\n","sex=man\n"]f.writelines(seq)f.close()结果:UserName=‘jack‘PassWord=‘123456‘age=19sex=man | 
6,file.flush()
刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。
| 
 1 
2 
3 
4 
 | 
f =open(‘user‘,‘r+‘)f.write(‘123‘)f.flush()                      #通过强制刷新,123已经写入到文件中name = input(‘input:‘)         #在这会一直等待用户输入 | 
7,file.truncate( [size] )
截取文件,截取的字节通过size指定,默认为当前文件位置。
| 
 1 
2 
3 
4 
 | 
f =open(‘user‘,‘r+‘,encoding="utf-8")f.seek(3)                     #将指针移动到第3个位置f.truncate()                  #指针以后清空f.close() | 
三、文件定位、重命名和删除文件
(一)、文件定位
file.tell() : 方法告诉你文件内的当前位置;换句话说,下一次的读写会发生在文件开头这么多字节之后。
file.seek(offset [,from]): 方法改变当前文件的位置。Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。
如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置。
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
 | 
f = open("user.txt",‘r+‘)               #读写的模式打开文件str = f.read(10)print("读取的字符串是:",str)  position = f.tell()                     #找到当前指针位置print("指针位置:",position)  position = f.seek(5,0)                  #将指针移动到从开头往后移动5个字节str=f.read(10)print(str)f.close()结果:读取的字符串是: weibo.com.指针位置: 10.com.cn | 
(二)、重命名和删除文件
Python的os模块提供了执行文件处理操作的方法,比如重命名和删除文件。
rename()方法:rename()方法需要两个参数,当前的文件名和新文件名。
| 
 1 
2 
 | 
import osos.rename("user.txt","test.txt") | 
remove()方法:删除文件,需要提供要删除的文件名作为参数。
| 
 1 
2 
 | 
import os  os.remove("test.txt")            #删除已经存在的文件 | 
(三)、知识点拾遗
在python2.7以后with open() 可以同时打开两个文件,具体操作如下:
| 
 1 
2 
3 
4 
5 
6 
 | 
with open(‘user‘,‘r‘,encoding=‘utf-8‘) as f1,open(‘user1‘,‘w‘,encoding=‘utf-8‘)as f2:    for line in f1:                                 #将f1一行一行的读取出来        new_str=line.replace(‘haifeng‘,‘idx‘)       #替换其中的某个字符串        f2.write(new_str)#                          #将替换好的文件写到新文件里os.rename(‘user‘,‘user.bak‘)                        #备份旧文件os.remove(‘user1‘,‘user‘)                           #发布新文件 | 
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
 | 
f =open(‘user‘,‘r+‘)                                #以读写的方式打开文件Name=input("input:")                                #获取用户输入for i in f.readlines():                             #已列表的方式一行一行读取文件    line = i.strip()                                #去除空格,空行    last_line = line.split("=")                     #按=号分割成新列表    if last_line[0] == ‘name‘:                      #判断如果是name的参数就行替换         last_line[1] = str(Name)        new_str = ‘=‘.join(last_line)               #将新列表转换成字符串f.seek(0,0)                                         #将指针调到起始位置开始f.write(new_str)                                    #写入写字符串f.truncate()                                        #将多余的字符删除f.close()                                           #关闭文件 | 
推荐使用第一种方法进行文件内容的更新,基础的文件操作就介绍到这里。
标签:
原文地址:http://www.cnblogs.com/phennry/p/5529029.html