文件操作

文件操作

f = open() # f: 学名:文件操作符 或 文件句柄 或者 文件操作对象# 习惯叫 f file f_obj f_handler fh
--------------------
f = open('file','w',encoding= ‘utf-8’)
#open打开文件是依赖了操作系统提供的途径
#操作系统有自己的编码,open在打开文件的时候默认使用操作系统的编码
#win系统 gbk mac、Linux系统 utf-8
mac, linux,打开python文件,默认utf-8,而python 3 默认是utf-8 所以用mac、Linux。系统的人 不用encoding='utf-8'
win系统打开python文件,默认gbk,而python 3 默认是utf-8,所以需要encoding='utf-8'

例如:我们用pycharm 编写代码的时候,默认使用utf-8方式编写内容,所以要先把打开的文件转换成utf-8格式,保证打开
的文件类型变成utf-8,和你将要以哪种(utf-8)保持一致,才行
例子,一篇文章,如果全是英语 ,你再往里面输入英文 英译汉 可以直接变成汉语
一篇文章,如果全是英语,你再往里面输入日语, 英译汉 就会出错

***只要写入的类型和打开的类型一致,不管什么操作系统都不会出错
-----------------

r w a r+ w+ a+ b rb wb ab

f.readable() #判断文件是否可读

f.writable() #判断文件是否可写

f.write('int') #write() 写入的date 全是str (打开文件的同时,文件被清空)
write()如果文件不存在,那么不存在的文件会被创建
----------

找到文件:
绝对路径: 文件路径要用取消转译的方式来表示(两种方法): 1. \\ 2.r'path'
相对路径: 文件和py的 执行文件 在相同路径下,直接用文件的名字就可以
----------------------

f.close() 关闭文件 (操作系统级别的关闭)
del f 主动的释放了一个python程序内存中的变量
(解释器会主动回收,所以可写可不写(例如:定义a = 1,b = 2,程序后面不用,解释器会主动回收,不过回收是需要时间的))
-------------------

f.read() 一次性读出文件的所有内容, r 是按字符读, rb 按字节读

f.read(n) 一次读n个字符

f.readline() 一次读一行,每次执行readline就会往下读一行 *** 不能直接读第二行
print()本身就带换行符,而文件每行末尾也有换行符,就会造成输出一行字符一行空,一行字符一行空。。。
print(1) ---------1\n
print('1\n')------1\n\n
所以加.strip(),把每行末尾的换行符去掉 (strip 能去掉空格、制表符、换行符)
content = f.readline()
print(content.strip())
content = f.readline()
print(content.strip())

f.readlines() 返回一个列表,将文件中的每一行作为列表的一个元素
readlines有一个问题,如果文件有4g ,你的电脑4g内存就爆了

for line i f: 一次拿一行到内存 释放掉上一行
print(line.strip())
-----------

 1 'name' 文件内容
 2 apple 10 3
 3 tesla 100000 
 4 mac 3000 2
 5 lenovo 30000 3
 6 chicken 10 3
 7 phone 3 3000
 8 
 9 程序:
10 f = open('name','r',encoding='utf-8')
11 dic = {}
12 shop_list = []
13 for i in f:
14 if line.strip(): 有空行的话,line.strip()就是 '' 空,空的bool值就是False,不执行
15 dic1 = {'name':None,'price':None}
16 li = i.split()
17 dic1['name'] = li[0]
18 dic1['price'] = li[1:]
19 shop_list.append(dic1)
20 print(shop_list)
21 f.close()

 

-------------------

f = open('file','a',encoding= 'utf-8') 之追写模式 (从文件末尾写入)
追写模式
--------
r + 可读可写
1.先读后写: 写是追写 (不管你读几个字符,文件指针都会移到文件末尾)
2.先写后读:从头开始写 (会造成乱码)
w + 可写可读
一上来文件就清空了,读出的内容是打开文件后新写入的
a + 之追加可读
-------

f = open('file','rb') 以二进制模式打开 并且不需要指定编码了 (不需要encodin='')
(处理 视频 图片 等非文字文件 )
--------------------
f = open('name','r',encoding='utf-8')
a = f.read(3) #把读取的值赋值给变量a
f.close()
print(a) #文件已经关闭,但仍然可以使用变量啊a
------------

tell() 查看当前指针位置

seek(0) 把指针定位到文件开头
seek(0,2) 把指针定位到文件末尾

truncate(n) 截取从开头到n个字符(0--n),n以后的全部删掉
必须是写入模式 ‘r+’ ‘a’ ‘a+’ ‘w’ ‘w+’ 也就是除了'r'模式
----------------

文件的修改

 1 name文件
 2 aaaaaaa
 3 bbbbbbb
 4 cccccccc
 5 
 6 f = open('name','r',encoding='utf-8') 以 r 模式打开name文件
 7 f1 = open('name1','w',encoding='utf-8') 以 w 模式创建 name1 文件
 8 for line in f:
 9 line = line.replace('a','x') 把‘a' 替换成 x
10 f1.write(line) 把修改后的字符串写入name1
11 f.close()
12 f1.close()
13 import os os模块
14 os.remove('name') 删除name文件
15 os.rename('name1','name') 把name1 文件改成原name文件
16 
17 name文件
18 xxxxxxxx
19 bbbbbbb
20 xxxxxxxx
21 文件不能直接修改,可以把修改的内容存在另一个文件,把原文件删除,然后另一个文件改名字,间接完成修改
22 -----------------
23 
24 with 可以不用关闭文件
25 name文件
26 xxxxxxxx
27 bbbbbbb
28 xxxxxxxx
29 
30 with open('name','r',encoding='utf-8') as f,\
31 open('name1','w',encoding='utf-8') as f1:
32 for line in f:
33 line = line.replace('x','a')
34 f1.write(line)
35 import os
36 os.remove('name')
37 os.rename('name1','name')
38 
39 name文件
40 aaaaaaa
41 bbbbbbb
42 cccccccc

 

-----------------------

posted @ 2017-10-31 16:26  静静别跑  阅读(157)  评论(0编辑  收藏  举报