python基础之文件操作

文件操作的基本流程

    计算机系统分为:计算机硬件,操作软件,应用程序三部分。

    通过文件操作就可以将数据永久保存下来。

1,打开文件,得到文件句柄并赋值给一个变量

f = open('文件名','r/w',encoding= 'utf-8' )
th open('源文件',encoding='utf-8') as f:    #打开文件,自带关闭功能
    pass

with open('原文件名',encoding='utf-8') as f,open('原文件名.back','w',encoding='utf-8') as f:
    pass              #两个文件连用修改,可连用多个,自带关闭功能

2,通过句柄对文件进行操作

data = f.read() #也可以是写

3,关闭文件

f.close()

注意:1,由应用程序向操作系统发起系统调用open(......)
            2,操作系统打开该文件,并返回一个文件句柄给应用程序

            3,应用程序将文件句柄赋值给变量 f

关闭文件注意事项

1,

1,f.close()     #回收操作系统级打开的文件

2,

del f       #回收应用程序级的变量


文件的读写

#1,打开文件的模式有(默认为文本模式)
#     r-------只读模式(默认模式,文件必须存在,不存在则抛出异常)
#     w-------只写模式(不可读,不存在则创建,存在则清空内容)
#     a-------只追加模式(不可读,不存在创建,存在追加内容)
# 2,对于非文本文件,只能使用b模式,‘b’表示字节的方式操作(而所有文件都是以字节的形式存储的,使用这种模式无须考虑文本文件的字符编码,图片文件的jgp格式,视频文件的avi格式)

#3'+'表示可以同时读写某个文件
# r+,读写(可读可写)
# w+,写读(可读可写)
# a+,写读(可读可写)
# x,只读模式(不可读,不存在则创建,存在报错)
# x+,写读(可读可写)

首先创建一个文件,在进行读写操作:

1,读

#打开文件
# f = open('歌词','r',encoding='utf-8')
f = open('歌词',encoding='utf-8')
#1.读文件的第一种方式:read方法,用read方法会一次性的读出文件中的所有内容
content = f.read()
print('read : ',content)
#2.读一部分内容:read(n),指定读n个单位
print(f.read(5))

#3.读文件的第三种方式:按照行读,每次执行readline就会往下读一行
content = f.readline()

print('readline : ',content.strip())    #strip去掉空格、制表符、换行符
content2 = f.readline()
print(content2.strip())

print(1)  #--> 1\n
print('1\n')  #--> 1\n\n

#4.读文件的第四种方式:readlines,返回一个列表,将文件中的每一行作为列表中的每一项返回一个列表
content = f.readlines()
print('readlines : ',content)

#5.读:最常用
for l in f:
    print(l.strip())

#关闭文件
f.close()
f = open('shoplist',encoding='utf-8') #读文件并整理成需要的数据类型
goods_list = []
for line in f:
    if line.strip():
        goods_dic = {'name':None,'price':None}
        line = line.strip()
        goods_lst = line.split()
        print(goods_lst)
        goods_dic['name'] = goods_lst[0]
        goods_dic['price'] = goods_lst[1]
        goods_list.append(goods_dic)
print(goods_list)
f.close()


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

2,写

# 习惯叫 f file f_obj f_handler fh
print(f.writable())   #判断文件是否可写
print(f.readable())   #判断文件是否可读
f.write('7018201890')  #写文件的时候需要写数字,需要把数字转换成字符串
f.write('aasjgdlwhoojfjdaj')
f.write('iq349jdsh\n')
f.write('aks')
f.write('\nsdgawo')     #文件的换行
f.write('志强德胜')     #utf-8 unicode gbk
f.close()

3,光标移动

f = open('歌词','r+',encoding='utf-8')
#seek 光标移动到第几个字节的位置
f.seek(0)    移动到最开始
f.seek(0,2)  移动到最末尾
f.truncate(3)  #从文件开始的位置只保留指定字节的内容
f.write('我可写了啊')
tell 告诉我光标在第几个字节
seek移动光标到指定位置
content = f.readline()
print(content.strip())
tell告诉你当前光标所在的位置
print(f.tell())
f.seek(4) #光标移动到三个字节的地方‘\r\n’
content = f.read(1)   #读一个字符
print('***',content,'***')
content = f.readline()
print(content.strip())
print(f.tell())
f.close()

文件的换行:   \r,\n,\r\n都可表示换行

文件内的光标移动

4.文件修改:

#文件的修改
#1.创建一个新文件
f2 = open('原文件.bak','w',encoding='utf-8')
#2.把原来的文件中的内容读出来
f = open('原文件',encoding='utf-8')
old_content = f.read()  #'原来的内容\n'
#3.操作读出来的字符串,把字符串中的内容替换掉
new_content = old_content.replace('','原来')
#4.把替换之后的内容写到新文件里
f2.write(new_content)
f.close()
f2.close()
# #5.删除原文件,新文件重命名成源文件的名字
import os   #os模块
os.remove('原文件')  #删除文件
os.rename('原文件.bak','原文件')  #重命名   #replace(‘老内容’,‘新内容’)

文件的删除
import os   #os模块
os.remove('原文件')  #删除文件

#1.创建一个新文件
f2 = open('原文件.bak','w',encoding='utf-8')
#2.把原来的文件中的内容读出来
f = open('原文件',encoding='utf-8')
for line in f:
    new_line = line.replace('原来','')
    f2.write(new_line)
f.close()
f2.close()
import os
os.remove('原文件')
os.rename('原文件.bak','原文件')

进阶例子
#1.创建一个新文件
f2 = open('原文件.bak','w',encoding='utf-8')
#2.把原来的文件中的内容读出来
f = open('原文件',encoding='utf-8')
count = 0
for line in f:
    if '原来' in line and count == 0:
        new_line = line.replace('原来','')
        f2.write(new_line)
        count = 1
    else:
        f2.write(line)
f.close()
f2.close()
import os
os.remove('原文件')
os.rename('原文件.bak','原文件')

with操作文件
f = open('原文件',encoding='utf-8')
content = f.read()
print(content)
f.close()

with open('原文件',encoding='utf-8') as f:
    # content = f.read()
    # print(content)
    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 on 2017-10-31 15:48  一万年  阅读(227)  评论(0编辑  收藏  举报