Python文件操作

一:文件操作必需

  • 文件的路径

可以是相对路径,也可以是绝对路径

  • 文件的编码 

 文件的存储和打开编码必需一样

  • 操作动作

动作用 r  w  a   

二:文件操作

2.1 读操作

  • read 是将文件的内容全部读取
  • readline  每次只读取文件一行内容
  • 读取的时候要注意要分批区读,如按每行去读
  • 每行读取的内容包括换行符,如果在打印时 print也会加上换行符,所以可以将每次读取的内容strip然后再打印
  • 文件时可迭代对象,可以被for循环

2.1.1 r操作

# read会一次性的读取文件内容

f = open('wangys',mode='r',encoding='utf-8')
ret = f.read()
print(ret)

 # readline每次读取一行内容,读取的包括换行符

# 内容包括换行符
# 如果不做处理,会将换行符打印出来
f = open('wangys',mode='r',encoding='utf-8') ret = f.readline() print(ret) ret = f.readline() print(ret) # name age
# 对换行符做strip处理
f = open('wangys',mode='r',encoding='utf-8') ret = f.readline().strip() print(ret) ret = f.readline().strip() print(ret)
#
name
age
# 推荐读的方式,一行一行的读取
f = open('wangys',mode='r',encoding='utf-8')
for line in f:
    print(line.strip())

打开方式:rb  常用于非文字文件,上传下载 

2.2 写操作

  • 如果文件存在,则清空文件,如果不存在,则创建
  • 默认不会加换行符,如果需要换行,则需要加换行符

2.2.1 w

f = open('lala',mode='w',encoding='utf-8')
f.write('haha')
f.close()

打开方式:wb 注意encode

f = open('lala',mode='wb')
f.write('撒旦飞洒地方'.encode('utf-8'))
f.close()

2.3  追加

  • 需要文件事先存在
  • 追加内容到文件

打开方式:a

f = open('lala',mode='wb')
f.write('撒旦飞洒地方'.encode('utf-8'))
f.close()

f = open('lala',mode='a',encoding='utf-8')
f.write('谁说的')
f.close()

打开方式: ab

f = open('lala',mode='ab')
f.write('我说的'.encode('utf-8'))
f.close()

2.4 读写

用的最多

打开方式: r+   如果是先读后写,是追加效果(读完后光标移到了最后,写追加到了最后),如果是写读,会有覆盖效果(光标在首位置,然后写)

f = open('lala',mode='r+',encoding='utf-8')
print(f.read())
f.write('真的')
f = open('lala',mode='r+',encoding='utf-8')
f.write('假的')
print(f.read())
f.close()

打开方式 r+b

f = open('lala',mode='r+b')
print(f.read())
f.write('你好啊'.encode('utf-8'))
f.close()

三:其他操作 

3.1  按字符读取

  • read是按照字符来读取的
wangys
f = open('wangys_info',mode='r+',encoding='utf-8')
data = f.read(3)
print(data)
f.close()

3.2 seek

  • seek第一个参数是偏移量,第二个参数是位置
  • seek(0)移动到开始位置
  • seek(0,2) 移动到文件结束位置
  • seek是按字节来移动的位置的

f = open('wangys_info',mode='r+',encoding='utf-8')
f.seek(3)
print(f.read())
f.close()

3.3 tell

  • 告诉我们光标的位置
  • 单位为bytes
王诚的博客

f = open('wangys_info',mode='r+',encoding='utf-8')
print(f.read())
print(f.tell())
f.close()

通过seek跟read读取指定的内容

读取博客
f = open('wangys_info',mode='a+',encoding='utf-8') f.write('博客') f.seek(f.tell()-6) print(f.read())

3.4  readline readlines

readline 一行一行读

王诚
博客

f = open('wangys_info',mode='r+',encoding='utf-8')
line = f.readline()
print(line)
f.close()

readlines

将读取的的每一行内容当作列表的元素放入一个列表中

f = open('wangys_info',mode='r+',encoding='utf-8')
lines = f.readlines()
print(lines)
f.close()

3.5 通过文件句柄将文件所有内容读取出来

f = open('wangys_info',mode='r+',encoding='utf-8')
for line in f:
    print(line)
f.close()

3.6  使用with打开文件

with open('wangc',mode='r+',encoding='utf-8') as f1,
        open('wangys',mode='r+',encoding='utf-8') as f2:
    print(f1.read())
    print(f2.read())

3.7

用户注册登录

register_user_name = input("请输入你要注册用户名").strip()
register_password = input("请输入密码").strip()
with open('user_list',mode='w',encoding='utf-8') as register_f:
    register_f.write('{}
{}'.format(register_user_name,register_password))
print('您注册成功')


count = 0
user_list=[]
while count < 3:
    login_user = input("请输入你要登录的用户名称").strip()
    login_pwd = input("请输入你登录的密码").strip()
    with open('user_list',mode='r+',encoding='utf-8') as judge_login_user:
        for line in judge_login_user:
            user_list.append(line)
        if login_user == user_list[0].strip() and login_pwd == user_list[1].strip():
            print('登录成功')
            break
        else:print('用户名密码错误')
    count+=1

3.8  文件内容修改

wangys_info文件  将文件里的wangys替换为王诚

姓名:wangys
性别:男

import os

with open('wangys_info',encoding='utf-8') as f1,
        open('wangys_info.bak','w',encoding='utf-8') as f2:
    for line in f1:
        if "wangys" in line:
            line=line.replace('wangys','王诚')
        f2.write(line)

os.remove('wangys_info')
os.rename('wangys_info.bak','wangys_info')

 3.9 简单的日志处理

id,name,age,sex
1,wangys,18,male
2,mengsx,18,female
3,caomei,0.5,male
log=[]
with open('info',mode='r',encoding='utf-8') as f:
    first_line_list = f.readline().strip().split()
    for line in f:
        dic = {}
        for index in range(len(first_line_list)):
            dic[first_line_list[index]] = line.strip().split()[index]
            log.append(dic)
print(log)

 

原文地址:https://www.cnblogs.com/wc89/p/10261545.html