Python基础 之 文件操作

文件操作

一、路径

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

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

二、编码方式

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'ideaxe4xb8xadxe7x9ax84xe7xa4xbaxe4xbex8b'
*** 以什么编码方式储存的文件,就以什么编码打开进行操作。

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:告诉你光标的位置

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('{}
{}'.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
username = input('请输入你要注册的用户名>>>')
password = input('请输入你要注册的密码>>>')

f = open('list_of_info2',mode='w',encoding='utf-8')
f.write('{}
{}'.format(username,password))
f.close()
# with open('list_of_info',mode='w',encoding='utf-8') as f:   #跟上面代码等效,末尾不用加close()
#     f.write('{}
{}'.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
终极傻瓜注释版本

原文地址:https://www.cnblogs.com/evenyao/p/9163191.html