python-文件操作

文件操作

 打开文件

f = open('歌词','w',encoding='utf-8')  

# f:文件操作符 文件句柄 文件操作对象

# 习惯叫f file f_obj f_handler fh

 

open打开文件是依赖了操作系统的提供的途径
操作系统有自己的编码,open在打开文件的时候默认使用操作系统的编码
win 是gbk编码形式,Mac和Linux是使用的utf-8编码形式
print(f.writable())   #判断文件是否可写
print(f.readable())   #判断文件是否可读
f.write('123456')   #写文件的时候需要写数字,需要把数字转换成字符串
print(f.write('123456'))    #返回值表示占有的字符数,如果带有\n,需要再加1个字节
f.write('asdff')
f.write('isfgs\n')  #\n 文件的换行
f.write('\ndljf')   #\n在后面,表示本次写入完成后,下一次再写入的内容会换行,\n在前面,表示本次写入的内容会在下一行显示
文件处理的步骤:
f = open('歌词','w',encoding='utf-8')
f.write('46564')
f.close()
del f #可写可不写
关闭文件详解:操作系统级别的关闭文件资源:f.close()
del f 主动释放了一个python程序内存中的变量,可写可不写
找到文件详解:文件与py的执行文件在相同路径下,直接用文件的名字就可以打开文件
文件与py的执行文件不在相同路径下,用绝对路径找到文件
文件的路径:需要用取消转译的方式来表示,有两种形式:r 或\\
如果以写文件的方式打开一个文件,那么不存在的文件将会被创建,存在的文件之前文件中的内容将会被清空
f = open(r'C:\Users\Administrator\Desktop\a.txt','w',encoding='utf-8')
f = open('C:\\Users\\Administrator\\Desktop\\a.txt','w',encoding='utf-8')
f.write('哈哈哈')
f.close()
打开文件:
f = open('歌词','r',encoding='utf-8')
1. 读文件的第一种方式:read,用read方法会一次性的读出文件中的所有内容
content = f.read()
f.close()
print(content)
2. 读一部分内容:read (n),指定读n个单位(包含转行符)
f = open('歌词','r+',encoding='utf-8')
content = f.read(2)
f.close()
print(content)
3. 读文件的第三种方式:按照行读,每次执行readline就会往下面再读一行(从上一次读取结束的位置往下读取一行)
content = f.readline()
f.close()
print(content.strip())  #strip去掉空格,制表符,换行符
4.读文件的第四种方式:readlines 返回一个列表,将文件中的每一行作为列表中的每一项返回一个列表
content = f.readlines()
print(content,type(content))      #['wenwen\n', '123\n', 'hello\n', 'das'] <class 'list'>
5.读:最常用
for i in f

b:图片,音乐,视频等任何文件,用于传输:上传和下载,在网络编程中会详细讲解
f = open('歌词','rb')
content = f.read()
print(content)
f.close()
  
一般情况下:文件操作,要么读,要么写,很少会用到读写、写读同时用的
常用的:r , w  , a
rb ,wb ,ab不需要指定编码了
f = open('歌词','rb')
content = f.read()
f.close()
print(content)
f2 = open('歌词2','wb')
f2.write(content)
f2.close()

 

 
r+ 可读可写:1.先读后写:写是追写 2.先写后读:从头开始写
f = open('歌词','r+',encoding='utf-8')
line = f.readline()
print(line)
f.write('0000')
f.close()

w+ 可写可读:一上来文件就清空了,
尽管可读:1,但是你读出来的内容是你这次打开文件新写入的
          2,光标在最后,需要主动移动光标才可读
f = open('歌词','w+',encoding='utf-8')
f.write('abc\n')
f.write('哇哈哈')
f.seek(0)       #光标跳到最开始的地方才可以读取到内容,在新增过文件内容后光标是在最后面的
print(f.read())
f.close()

seek 光标移动到第几个字节的位置
f.seek(0)    #移动到最开始
f.seek(0,2)    #移动到最末尾
print(f.readline())
tell 告诉我光标在第几个字节
f = open('歌词','r+',encoding='utf-8')
print(f.seek(0,2))
print(f.tell())
f.truncate(3)
seek 移动光标到指定位置(去最开始,去最结尾)
truncate:文件中只保留n个字节

 

注意:
  1. seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的
2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,
所以truncate要在r+或a或a+等模式下测试效果
购物车
f = open('shoplist',encoding='utf-8')
goods_dict = {}
for line in f:
    line = line.strip()
    goods_list = line.split()
    goods_dict[goods_list[0]] = goods_list[1:]
print(goods_dict,type(goods_dict))


f = open('shoplist',encoding='utf-8')
goods_list = []
for line in f:
    goods_dic = {'name':None,'price':None,'数量':None}
    line = line.strip()
    goods_lit = line.split()
    # print(goods_list)
    goods_dic['name'] = goods_lit[0]
    goods_dic['price'] = goods_lit[1]
    goods_dic['数量'] = goods_lit[2]
    goods_list.append(goods_dic)
print(goods_list)
f.close()


f = open('shoplist', encoding='utf-8')
good_list=[]
for line in f:
    # if line.strip():            #只显示文件中有内容的行
        # print(line.strip())
    line = line.strip()
    goods_list = line.split()
    print(goods_list)
f.close()

文件的修改
1.创建一个新文件
2.把原来的文件中的内容读出来
3.操作读出来的字符串,把字符串中的内容替换掉
4.把替换之后的内容写到新文件里
5.删除原文件,新文件重命名成原文件的名字
删除原文件需要以下操作:
import os #os模块
os.remove('原文件') #删除文件
os.rename('原文件.bak','原文件') #把新文件重命名为原文件的名字
具体步骤如下:
f1 = open('原文件.bak','w',encoding='utf-8')
f = open('原文件',encoding='utf-8')
old_content = f.read()  #原来的内容\n
new_content = old_content.replace('','原来')
f1.write(new_content)
f.close()
f1.close()
import os
os.remove('原文件')
os.rename('原文件.bak','原文件')
具体步骤,修改全部
当文件特别大时上面方法就不适用了
当文件特别大时,只改第一个要修改的内容

 with操作

with open('原文件',encoding='utf-8') as f:
    content = f.read()
    print(content)

with open('原文件',encoding='utf-8') as f:
    content = f.read()
    for line in f:
        print(line.strip())

with open('原文件',encoding='utf-8')as f,open('原文件.bak','w',encoding='utf-8')as f1:
    for line in f:
        new_line = line.replace('原来','')
        f1.write(new_line)
import os
os.remove('原文件')
os.rename('原文件.bak','原文件')

 

posted @ 2017-11-02 16:46  dwenwen  阅读(177)  评论(0编辑  收藏  举报