向左转向右走

导航

python-文件操作

1、打开文件
2、对文件进行读/写
3、关闭文件

# 打开文件,文件路径可以是绝对路径,路径前面r是原字符的意思,不转义文件路径中转义字符
# f= open(r'丽丽','a',encoding='utf-8')
# f= open(r'用户名密码',encoding='utf-8')
# 读取文件
# print('read:\n',f.read()) #获取文件里面的所有内容
# print('readline:',f.readline()) #读取文件一行的数据
# print('readlines:',f.readlines()) #获取文件里面所有的数据,返回的是一个list,每一行的数据放到一个list里面
#文件的指针,是控制文件到底读到哪里的,读文件和写文件时,文件指针都会移动
# 写文件
# f.write('sfsdh') #写文件

# 示例:
f= open(r'文件读写','a+',encoding='utf-8')
# f.seek(0) #移动文件指针到最前面
# print(f.read())
# f.write('会覆盖睡觉的好的老公') #写一个字符串
f.writelines() #写一个list
#示例:
for i in list:
f.writelines()

# f.seek(0) #移动文件指针到最前面
# print(f.read())

#文件打开的三种模式:只读模式;写模式;追加模式
# 1、有没有清空以前的内容
# 2、能不能读到东西
# 3、文件不存在的时候会不会报错
# 读模式 r 默认模式,只能读,不能写,文件不存在会报错,
# 读写模式 r+ 可读可写,打开不存在文件也会报错,不会覆盖以前的内容,写完文件后文件指针移动到文件最后边,导致读不到东西
# 写模式 w 只能写,不能读,会覆盖以前文件里面的内容,文件不存在,会帮你创建一个
# 写读模式 w+ 可读可写,写时会覆盖以前文件的内容,读不报错,但是读不到东西,因为字写文件的时候文件指针移动到文件的最后边,所以读不到东西
'''
只要沾上r,文件不存在肯定会报错,文件指针在开头
只要沾上w,文件内容肯定会被清空,文件指针在开头或者末尾
a 模式的文件指针在末尾
'''
# 追加模式 a 在文件的末尾追加东西,可写,不会覆盖文件之前的内容,文件不存在会新建文件,但不可读,会报错
# 追加读模式 a+ 追加读模式,能读能写,不会清空以前的内容,文件不存在会新建,默认打开文件的时候文件指针在最后,所以读不到东西。
# f.seek(0) #移动文件指针到最前面

# 示例2
names=['qq','ss','dd','cc']
for name in names:
f.write(name+'\n')
# f.writelines(names) #传一个list,然后把list里面的每一个元素写到文件中
# f.readlines()
# f.close()
print(f.read())

文件操作另一种方法
#用with打开文件
with open('1-笔记','w') as f:
f.read()
f.write()
#用with同时打开2个及以上的文件
with open('1-笔记','w') as f , open('用户名密码','w') as f2:
f.read()
f.write()

文件修改
f=open('用户名密码','r+',encoding='utf-8')
f.seek(0)
data = f.read()
new_data =data.replace('123','a')
# print(new_data)
f.seek(0)
f.write(new_data)
这种文件修改方式会出错

第一种:简单粗暴:数据量小的时候可以用
1、先获取到文件里面的所有内容
2、然后修改内容
3、清空源文件中所有内容
4、重新写入
示例
f=open('用户名密码','a+',encoding='utf-8')
f.seek(0)
data = f.read()
new_data =data.replace('a','python')
f.seek(0)
f.truncate() #清空文件
f.write(new_data)
f.flush()
# f.close()
f.seek(0)
print(f.read())

第二种:高效的处理方式:一行一行处理,数据量大的时候用,就是win系统中修改文件内容的原理
1、先打开源文件:words,再打开一个空文件:words_new
2、循环处理源文件里面每一行数据,处理完之后,写到新文件里面
3、把源文件删除,把新文件的名字修改成源文件的名字
4、

import os
with open(r'words',encoding='utf-8') as fr , open('.words','w',encoding='utf-8')as fw:
for line in fr:
line=line.lstrip() #去掉左边的空格
if line : #非空即真原理,判断这一行是否有数据
line=line.replace('你','you') #替换数据
fw.write(line) #写到新文件中
os.remove('words') #删除源文件
os.rename('.words','words') #把新文件的名字更改成源文件名字

import os
with open(r'eamil',encoding='utf-8') as fr , open('.eamil','w',encoding='utf-8')as fw:
for line in fr:
# line=line.lstrip() #去掉左边的空格
if not line[0].isdigit(): #判断是否为纯数字
print('line:',line)
line=line.replace('\n','@163.com\n') #替换数据
fw.write(line) #写到新文件中
fw.flush()
os.remove('eamil') #删除源文件
os.rename('.eamil','eamil') #把新文件的名字更改成源文件名字

# print(name.isspace()) #判断只能有英文、汉子就返回真

posted on 2018-06-22 15:41  向左转向右走  阅读(481)  评论(0编辑  收藏  举报