欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python基础 之 文件操作

程序员文章站 2022-03-08 20:37:46
文件操作 一、路径 文件绝对路径:d:\python.txt 文件相对路径:在IDEA左边的文件夹中 二、编码方式 utf-8 gbk... 三、操作方式 1.只读 r 和 rb 2.只写 w 和 wb 3.追加内容 a 和 a+ ***** 4.读写 r+ 和 r+b 5.写读 w+ 和 w+b ......

文件操作

一、路径

文件绝对路径:d:\python.txt

文件相对路径:在IDEA左边的文件夹中

Python基础 之 文件操作

 

二、编码方式

utf-8 gbk...

 

三、操作方式

1.只读

r 和 rb

绝对路径的打开操作
f = open('d:\even.txt',mode='r',encoding='UTF-8')
content = f.read()
print(content)
f.close()
#test
#简单的文件操作示例

在idea文件夹中打开操作
f = open('even',mode='r',encoding='UTF-8')
content = f.read()
print(content)
f.close()

f = open('even',mode='rb')    #以rb方式打开,后面则不用再跟encoding='UTF-8'
content = f.read()
print(content)
f.close()
#b'idea\xe4\xb8\xad\xe7\x9a\x84\xe7\xa4\xba\xe4\xbe\x8b'
*** 以什么编码方式储存的文件,就以什么编码打开进行操作。

 

2.只写 

w 和 wb

#对于w,没有此文件就会创建文件

f = open('log',mode='w',encoding='utf-8')    #log为创建的文件名
f.write('创建测试')    #创建文件要写入的的内容
f.close()

 

 

3.追加内容

a 和 a+ 

#a
f = open('log',mode='a',encoding='utf-8')    #log为需要追加的文件名
f.write('佳琪')    #追加要写入的的内容
f.close()

#a+
f = open('log',mode='a+',encoding='utf-8')
f.write('77777')
f.seek(0)
print(f.read())
f.close()

 

 

***** 4.读写

r+  和  r+b

f = open('log',mode='r+',encoding='utf-8')
print(f.read())        #先读
f.write('大,小')    #后写
f.close()

#如果在r+的模式下先写后读,会将此次写入的字符从这个文件开始进行覆盖写入
f = open('log',mode='r+',encoding='utf-8')
f.write('大,小')    #先写
print(f.read())        #后读
f.close()

 

5.写读

w+ 和 w+b

f = open('log',mode='w+',encoding='utf-8')
f.write('66666')    #先写
f.seek(0)            #调整光标位置至开始 
print(f.read())        #后读
f.close()
#66666

 

*** 文件操作之后 一定要加.close()
如果不加。可能未写入磁盘,导致文件部分丢失。
因为操作完,数据大多在内存里。
例如把word写上十几页后,直接把电脑关闭了。

*****最常用的
r+

 

 

四、文件操作功能详解

1.seek 和 tell

seek:按照字节定光标的位置

tell:告诉你光标的位置

Python基础 之 文件操作
obj = open('log',mode='r+',encoding='utf-8')
content = f.read(3)  # 读前3个字符
f.seek(3)  # 按照字节定光标的位置
f.tell() # 告诉你光标的位置
print(f.tell())
content = f.read()
print(content)
seek 和 tell

 

2.readline 和 readlines

line = f.readline()  # 一行一行的读
line = f.readlines()  # 每一行当成列表中的一个元素,添加到list中

 

3.readable

f.readable()  # 是否可读

 

4.打开多个

with open('log',mode='r+',encoding='utf-8') as obj:
    print(obj.read())
#f.close() 该格式可不写f.close(),自动关闭

#可以打开多个,且末尾不用加close
with open('log',mode='r+',encoding='utf-8') as f1,\
        open('log',mode='r+',encoding='utf-8') as f2:
    print(f1.read())
    print(f2.read())

 

5.删除和重命名

修改文件的本质是先创建一个文件的bak然后进行修改,再删除源文件,再将bak文件重命名为源文件名

with open('even',encoding='utf-8') as f,open('even.bak','w',encoding='utf-8') as f2:
    for line in f:
        if '苹果' in line:  #even中的内容:苹果
            line = line.replace('苹果','梨子')
        #写文件
        f2.write(line) 
import os
os.remove('even') #删除文件
os.rename('even.bak','even')  #重命名文件 将even.bak重命名为even

 

 

 五、练习

 注册和登录

username = input('请输入你要注册的用户名>>>')
password = input('请输入你要注册的密码>>>')

with open('list_of_info',mode='w',encoding='utf-8') as f:   #跟上面绿色注释的代码等效,末尾不用加close()
    f.write('{}\n{}'.format(username,password))
print('恭喜您,注册成功')
lis = [] i = 0 while i < 3: usn = input('请输入你的用户名:') pwd = input('请输入你的密码:')
with open('list_of_info',mode='r+',encoding='utf-8') as f1: for line in f1: lis.append(line)
if usn == lis[0].strip() and pwd == lis[1].strip(): print('登录成功') break else:print('账号或密码错误') i+=1
Python基础 之 文件操作
username = input('请输入你要注册的用户名>>>')
password = input('请输入你要注册的密码>>>')

f = open('list_of_info2',mode='w',encoding='utf-8')
f.write('{}\n{}'.format(username,password))
f.close()
# with open('list_of_info',mode='w',encoding='utf-8') as f:   #跟上面代码等效,末尾不用加close()
#     f.write('{}\n{}'.format(username,password))

print('恭喜您,注册成功')
lis = []    #定义一个空的list类lis
i = 0       #定义一个变量i为0,作为次数限制
while i < 3:    #定义一个while循环 i < 3来限制错误次数
    usn = input('请输入你的用户名:')    #重新定义新的input输入变量usn用来进行登录
    pwd = input('请输入你的密码:')      #重新定义新的input输入变量pwd用来进行登录
    
    f1 = open('list_of_info2', mode='r+', encoding='utf-8')
    f.close()
    
   #with open('list_of_info',mode='r+',encoding='utf-8') as f1:
    for line in f1:            #f1进行for循环并用line表示
        lis.append(line)       #将line添加至之前定义的空lis中
        
    if usn == lis[0].strip() and pwd == lis[1].strip(): #如果用户名和密码都能对应 则登录成功
        print('登录成功')
        break
    else:print('账号和密码错误')
    i+=1
终极傻瓜注释版本