1 文件的基本操作

#1. 打开文件的模式有(默认为文本模式):
r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
w,只写模式【不可读;不存在则创建;存在则清空内容】
a, 只追加写模式【不可读;不存在则创建;存在则只追加内容】 #2. 对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)
rb
wb
ab
注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码 #3,‘+’模式(就是增加了一个功能)
r+, 读写【可读,可写】
w+,写读【可写,可读】
a+, 写读【可写,可读】 #4,以bytes类型操作的读写,写读,写读模式
r+b, 读写【可读,可写】
w+b,写读【可写,可读】
a+b, 写读【可写,可读】

2 文件的方法

read(3):

  1. 文件打开方式为文本模式时,代表读取3个字符

  2. 文件打开方式为b模式时,代表读取3个字节

其余的文件内光标移动都是以字节为单位的如:seek,tell,truncate

注意:

  1. seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的(如是移动中文的话,在utf-8 中移动,若不是3的倍数,就会报错)

  2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果。(不知道可不可以调光标)

r 读模式:

  若在E盘下的可以把文件的相对路径写入如下:(不存在此文件时,会报错)

f = open('e:/new.txt',mode = 'r', encoding='utf-8')#编码用什么方式编的, 就要用什么方式打开,在pyCharm 中默认是用utf-8 编写的
conenct = f.read()
print(conenct)
f.close()
f = open('newt',mode = 'r', encoding='utf-8')#编码用什么方式编的, 就要用什么方式打开,在pyCharm 中默认是用utf-8 编写的
conenct = f.read()
print(conenct)
f.close()

  这是打开python 文件下目录下文件, 就不用写绝对路径,只需要定相对路径即可

  注意 :在文件操作时一定要记得关闭文件,也就是close

rb bytes模式下的读(非文本类型的时候用)

f = open('file1',mode='rb')
conenct = f.read()
print(conenct)#b'\xe6\x88\x91\xe6\x83\xb3\xe7\x9d\xa1\xe8\xa7\x89'
f.close()

  因为是用 bytes 类型打开,所以就不用写解码方式,打印的数据是 utf-8 ,因为我写了四个中文,12个字节

w 写模式

  不存在就创建,存在就全删在写

f = open('file1',mode='w',encoding='utf-8')
conenct = f.write('我想睡觉')
print(conenct)#返回值为其的字符个数,只能写,覆盖,不能读
f.close()

wb bytes模式下的写

f = open('file1',mode='wb')
conenct = f.write('傻不傻'.encode('utf-8'))
print(conenct)#返回的其字节个数 9
f.close()

a 追加

  其实和w 差不多, 只是不会删除,在之后写上而以(ab 都一样,和wb 差不多)

r+ 读写模式(在读的基础上加了写的功能,但是只有两个功能, 再读的话就不行了)这个功能是用的最多的

w+ 与a+

f = open('file1',mode='w+',encoding='utf-8')
f.write('afdf')
f.seek(0)#要移动光标才能读出来东西
print(f.read(2))
f.close()

3 对文件的修改

  将硬盘存放的该文件的内容全部加载到内存,在内存中是可以修改的,修改完毕后,再由内存覆盖到硬盘(word,vim,nodpad++等编辑器)

import os  # 调用系统模块

with open('a.txt') as read_f,open('.a.txt.swap','w') as write_f:
data=read_f.read() #全部读入内存,如果文件很大,会很卡
data=data.replace('alex','SB') #在内存中完成修改 write_f.write(data) #一次性写入新文件 os.remove('a.txt') #删除原文件
os.rename('.a.txt.swap','a.txt') #将新建的文件重命名为原文件 方法一

  方式二:将硬盘存放的该文件的内容一行一行地读入内存,修改完毕就写入新文件,最后用新文件覆盖源文件

import os

with open('a.txt') as read_f,open('.a.txt.swap','w') as write_f:
for line in read_f:
line=line.replace('alex','SB')
write_f.write(line) os.remove('a.txt')
os.rename('.a.txt.swap','a.txt') 方法二

ps:

  以后打开方式用 with 可以不用 close

with open('log',mode='r+',encoding='utf-8') as f,open('log',mode='w+',encoding='utf-8') as f1:

  也可以打开多个文件

4 注册小作业

  一个简单的注册登入作业,如果没有账号就创建一个新的,有就用原来的账号登入,

flag = True
while flag:
i = 0
while i <3 and flag :
whether_account = input('是否拥有账号,如果有请输入 y,没有输入 n(输入 q 退出):')
if whether_account.strip() == 'y':
break
elif whether_account.strip() =='n':
username = input('请输入想要注册的用户名:')
password = input('请输入密码:')
with open(username, mode='w+', encoding='utf-8') as f1:
f1.write('{}\n{}'.format(username,password))
break
elif whether_account.strip() =='q':
flag =False
elif i !=2:
print('请输入正确字符,你只有{}机会'.format(2-i))
i +=1
lis = []
i = 0
try:
while i < 3 and flag:
user_name = input('请输入你的账号:')
password = input('请输入你的密码:')
with open(user_name, mode='r+', encoding='utf-8') as f2:
for lin in f2:
lis.append(lin.strip())
if user_name == lis[0] and password == lis[1]:
print('欢迎登入'.center(51,'~'))
flag = False
elif i != 2:
print(' 你只有 %d 次机会' %(2-i))
i += 1
except(FileNotFoundError) as e:
c

Python学习之路基础篇--08Python基础+ 文件的基本操作和 注册小作业的更多相关文章

  1. Python学习【第十篇】基础之杂货铺

    字符串格式化 Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存. 百分号方式: ...

  2. python学习之路入门篇

    本文是up学习python过程中遇到的一些问题及总结归纳,本小节是入门篇. python基本语法 循环.分支不多赘述. 模块:一个.py文件就是一个模块. 文件和异常 模式 含义解释 “r” 读模式 ...

  3. Python学习之路【目录】

    本系列博文包含 Python基础.前端开发.Web框架.缓存以及队列等,希望可以给正在学习编程的童鞋提供一点帮助!!! 目录: Python学习[第一篇]python简介 Python学习[第二篇]p ...

  4. Python学习之路【第一篇】-Python简介和基础入门

    1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是 ...

  5. python学习之路-day2-pyth基础2

    一.        模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,第三方库存放位置:site-packages sys模块简介 导入模块 import sys 3 sys模 ...

  6. Python学习之路-Day2-Python基础2

    Python学习之路第二天 学习内容: 1.模块初识 2.pyc是什么 3.python数据类型 4.数据运算 5.bytes/str之别 6.列表 7.元组 8.字典 9.字符串常用操作 1.模块初 ...

  7. Python学习之路-Day1-Python基础

    学习python的过程: 在茫茫的编程语言中我选择了python,因为感觉python很强大,能用到很多领域.我自己也学过一些编程语言,比如:C,java,php,html,css等.但是我感觉自己都 ...

  8. Python学习之路-Day2-Python基础3

    Python学习之路第三天 学习内容: 1.文件操作 2.字符转编码操作 3.函数介绍 4.递归 5.函数式编程 1.文件操作 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个 ...

  9. Python(四)基础篇之「文件对象&错误处理」

    [笔记]Python(四)基础篇之「文件对象&错误处理」 2016-12-08 ZOE    编程之魅  Python Notes: ★ 如果你是第一次阅读,推荐先浏览:[重要公告]文章更新. ...

随机推荐

  1. (转)用库函数stdarg.h实现函数参数的可变

    原文地址:https://blog.csdn.net/jinkui2008/article/details/1967055 #define _INTSIZEOF(n)   ( (sizeof(n) + ...

  2. Python数据类型——字符串

    概论 字符串顾名思义就是一串字符,由于Python中没有“字符”这种数据类型,所以单个的字符也依然是字符串类型的.字符串可以包含一切数据,无论是能从键盘上找到的,还是你根本都不认识的.与数一样,字符串 ...

  3. 语音识别ASR - HTK(HResults)计算字错率WER、句错率SER

    HResults计算字错率(WER).句错率(SER) 前言 好久没发文,看到仍有这么多关注的小伙伴,觉得不发篇文对不住.确实好久没有输出经验总结相关的文档,抽了个时间,整理了下笔记,发一篇关于ASR ...

  4. BZOJ2662 [BeiJing wc2012]冻结

    网上的题解都是分层图+spfa或者dijkstra 我觉得dijk太难写了,懒得写,看了一下数据范围$N=50$,这显然是出题人勾引人犯罪 我决定使用floyd的做法,令$f[i][j][t](k)$ ...

  5. learning makefile 模式规则

  6. python输入整数

    #!/usr/bin/env python#ecoding=utf-8'''Created on 2017年11月2日 @author: James zhan''' def fun(n): if n= ...

  7. ROS机器人导航仿真(kinetic版本)

    准备工作: ubuntu 16.04系统;ROS kinetic版本;ROS包turtlebot,导航包rbx1,模拟器arbotix,可视化rviz 1.安装ubuntu 16.04系统与安装ROS ...

  8. 1.1 Java并发编程的一些概念

    并发编程的一些概念 同步和异步 同步: 同步方法必须等到方法调用返回后,才能继续后继的行为.也就是说,同步方法执行时,如果没有返回,则后面的方法是执行不到的.同步方法调用,调用过程中可能出现阻塞和等待 ...

  9. 文件操作fopen

    这块所谓的"文件操作"就是把文件的内容读进程序,然后根据具体的格式进行解析,或者是显示,或者是修改. 也就是把一个文件加载到程序里面,然后对其进行修改. 文件操作就三步(固定的三步 ...

  10. linux发布环境初始化脚本

    #参数配置 homeDir=$(pwd) tomcatDir=$homeDir/tomcat logDir=$homeDir/tomcat/logs backUpDir=$homeDir/backup ...