18文件处理 20200716

文件处理

"""
1、什么是文件
    文件是操作系统提供给用户/应用程序操作硬盘的一个虚拟单位


2、为何要用文件
    存取硬盘必须使用文件


3、如何用文件
    f = open(文件路径,打开模式)
    f.write(数据)
    f.close()

    应用程序/用户       文件对象/文件句柄=================》遥控器
    操作系统            打开文件a.txt============》空调
    硬件                硬盘

"""
# 绝对路径
# windows系统
# D:\python38\Doc\python383
# C:\a\b\c\new.txt

# linux系统
# /a/b/c/d.txt

# file_path=r'C:\a\b\c\new.txt'
# file_path=r'/a/b/c/d.txt'

# 相对路径
# c\d.txt
# d.txt

# 示范:
r"D:\python全栈15期\day10\a.txt"
f = open(r"aaa\a.txt", mode='rt',encoding='utf-8')
res=f.read()
print(res)
f.close()

f = open(r"aaa\a.txt", mode='rb')
res=f.read()
# print(res,type(res))
x=res.decode('utf-8')
print(x)
f.close()


f = open('/Users/moyan/PycharmProjects/python15/练习/data1.txt', mode='rb')
res = f.read()
print(res)
f.close()
# 文件的打开模式分为两大类
# 一:控制文件读写操作的模式
# 1.1、 r:只读:在文件不存在时则报错,文件存在时文件指针跳到文件开头
f = open('a.txt', mode='rt', encoding='utf-8')
res = f.read()
f.close()

# 1.2、 w:只写 在文件不存在则创建空文件,文件存在时文件指针跳到文件开头,清空原文件重新写入
f = open('b.txt', mode='wt', encoding='utf-8')
f.write('egon:123')
f.close()

# 3、 a:只追加写 : 在文件不存在则创建空文件,文件存在时文件指针跳到文件末尾
f = open('c.txt', mode='at', encoding='utf-8')
f.write('jason:777')
f.close()

# 总结:w与a的异同
# 相同点:在打开了文件不关闭的情况下,连续的写入,新内容永远跟在老内容之后
# 不同点:重新打开文件,w会清空老的内容,而a模式会保留老的内容并且指针跳到文件末尾

# 示范1:注册功能
name = input("your name: ").strip()
# 做合法性校验:
# 1、如果输入的用户名包含特殊字符^$&...让用户重新输入
# 2、如果输入的用户名已经存在也重新输入
# pwd = input("your password: ").strip()
# 做合法性校验:
# 1、密码长度
# 2、如果密码包含特殊字符则重新输入
f.txt = open('user.txt',mode='at',encoding='utf-8')
f.txt.write('%s:%s\n' %(name,pwd))
f.txt.close()

# 示范2:登录功能
inp_name = input("your name: ").strip()
inp_pwd = input("your pwd: ").strip()

f.txt = open('user.txt',mode='rt',encoding='utf-8')
for line in f.txt:
    user,pwd=line.strip('\n').split(':')
    if inp_name == user and inp_pwd == pwd:
        print('login successful')
        break
else:
    print('user or password error')
#
# f.txt.close()
# 升级需求1:同一个账号输错三次则退出
# 升级需求2:同一个账号输错三次则,该账号则锁定10秒,即便程序被终止,仍然计时


# 二:控制文件读写内容的模式
# 1、 t:读写都是以str字符串为单位,一定要指定encoding
f = open('c.txt', mode='rt', encoding='utf-8')

# 2、 b:读写都是以bytes为单位,一定不能指定encoding
f = open('c.txt', mode='rb')


# 文件拷贝程序
src_file = input('origial path:')
dst_file = input('origial path:')

f = open(r'%s' % src_file, mode='rb')
data = f.read()
f.close()

new_f = open(r'%s' % dst_file, mode='wb')
new_f.write(data)
new_f.close()

# with 方法
src_path = input('origial path:')
dst_path = input('target path:')
with open(r'%s' % src_path, mode='rb') as f, open(r'%s' % dst_path, mode='wb') as f_new:
	for line in f:
		f_new.write(line)

# 补充
# rwa
# tb必须和rwa联用
# +必须与rwa联用:r+、w+、a+

# r+t, w+t,a+t,r+b, w+b, a+b

# 默认的是rt
# with open('a.txt') as f:
#     pass

# with open('a.txt',mode='w+') as f:
#     pass
with open('a.txt', 'rt') as f:
	line1 = f.readline()
	line2 = f.readline()
	line3 = f.readline()
	line4 = f.readline()
	print(line1)
	print(line2)
	print(line3)
	print(line4)
	res = f.readlines()
	print(res)

with open('b.txt', 'wt') as f1:
	lines = ['111\n','222\n']
	for line in lines:
		f1.write(line)

	f1.writelines(lines)

f.name  # 查看路径
f.flush()  # 刷新,具有实时性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值