文件处理
文本模式
name = input("请输入用户名:").strip()
with open("a.txt","wt",encoding="utf-8") as f:
f.write(name)

with open("a.txt","r",encoding="utf-8") as f:
data = f.read()

name = input("请输入用户名:").strip()
with open("a.txt","wt",encoding="utf-8") as f:
f.write(data)
f.write("\n")
f.write(name+"\n")

name = input("name:").strip()
with open("a.txt",mode="at",encoding="utf-8") as f:
f.write(name+"\n")

字节模式
  b表示字节模式
  与文本相同在于都必须与r、w、a连用
  rb 只读字节模式
  wb 只写字节模式
  ab 追加只写字节模式
  b模式可以操作任意类型的文件
  注意:
    1.b模式不允许设置编码参数
    2.读写数据都以字节为单位
with open("a.txt",mode="rb")as f:
data = f.read()
print(data)
print(type(data))
print(data.decode("utf-8"))

with open("2.文本模式回顾.mp4",mode="rb")as f:
data = f.read(1024*1024)
print(data)
print(type(data))
# print(data.decode("")) #

with open("a.txt", mode="wb")as f:
f.write("123".encode("utf-8"))
print(type("123".encode("utf-8")))

with open("a.txt", mode="ab")as f:
f.write("123".encode("utf-8"))
print(type("123".encode("utf-8")))

可读可写模式
  +表示可读可写模式
  也不能单独使用
    r+ == r+t 直接写入会把原数据覆盖掉
    w+ == w+t 打开就清空所以读不到
    a+ == a+t 打开就移动光标到末尾也读不到
  可读可写字节模式
    r+b 直接写入会把原数据覆盖掉
    w+b 打开就清空所以读不到
    a+b 打开就移动光标到末尾也读不到
  每一个都有问题所以可读可写并不常用
with open("a.txt",mode="r+",encoding="utf-8") as f:
# print(f.read())
f.write("abc")
复制文件
复制文件?
  从源文件读取写入到新文件中
  打开源文件
source_f = open("a.txt","rb")
  打开目标文件
dst_f = open("a副本.txt","wb")
  从源文件读取数据写入到目标文件
data = source_f.read()
dst_f.write(data)

source_f.close()
dst_f.close()
  并列打开多个文件可以用逗号隔开
with open("a.txt","rb") as source_f,open("a副本.txt","wb") as dst_f:
data = source_f.read()
dst_f.write(data)
  with 嵌套语法
with open("a.txt","rb") as source_f:
with open("a副本.txt","wb") as dst_f:
data = source_f.read()
dst_f.write(data)
  with的嵌套时注意:不要对同一个文件进行操作
with open("l.txt","rb") as source_f:
with open("l.txt","wb") as dst_f:
data = source_f.read()
dst_f.write(data)
  让用户指定要复制的文件
source_path = input("请输入源文件路径:").strip()
dst_path = input("请输入目标文件路径:").strip()

with open(source_path,"rb") as source_f:
with open(dst_path,"wb") as dst_f:
data = source_f.read()
dst_f.write(data)
  基于CMD的复制工具要达到的效果在CMD中直接输入要复制的文件路径以及目标文件路径一回车就完成复制
    1.需要获取CMD输入的参数
import sys # 有一个文件叫sys import是导入这个文件
sys文件里有一个变量名称叫argv
print(sys.argv) # 得到的就是执行解释器时传入的参数,第一个参数默认就是当前执行文件
    源文件路径
source_path = sys.argv[1]
    目标文件路径
dst_path = sys.argv[2]

with open(source_path,"rb") as source_f:
with open(dst_path,"wb") as dst_f:
data = source_f.read()
dst_f.write(data)
    文件对象其他操作
f = open("userdb.txt","at",encoding="utf-8")
for i in range(10):
data = input(">>:").strip()
f.write(data)
print("写了一次")
f.flush() # 立即将数据写入硬盘,可以保证数据不丢失,但是效率会降低
f.close()

print(f.closed) # 文件是否已经关闭
print(f.encoding) # 获取文件的编码方式
print(f.buffer) # 获取缓冲区 忘记它吧

文件的修改
  1.读取文件数据到内存
  2.进行修改
  3.将修改后的数据写回文件中
文本 userdb.txt
admin|root|123
jack|123|110
aaaaa|123|110
admin|123|123
杰克逊|123123|123

  方法1:
new_data = ""
with open("userdb.txt",encoding="utf-8") as f:
data = f.read()
datas = data.split("\n")
for line in datas:
print(line.split("|")[0])
name = line.split("|")[0]
if name == "admin": # 取出名字判断是否等于admin
name = name+"[is good man]" # 如果是则添加 is good man
# 取出密码 和手机号 再次拼接为原来的样式
pwd = line.split("|")[1]
phone = line.split("|")[2]
new_line = "|".join([name,pwd,phone])
new_line += "\n"
# 拼接修改过的数据
new_data += new_line
else:
# 拼接未被修改的数据
line += "\n"
new_data += line

print(new_data)
with open("userdb.txt",mode="wt",encoding="utf-8") as f:
f.write(new_data)
以上代码存在什么问题相当于把整个文件数据都存到内存中会造成内存溢出
  方法2:
读取一行修改一行修改完立马写入硬盘,避免了内存溢出的问题
具体使用哪种方式的看文件大小
较小的文件推荐一次性读到内存进行修改减少io操作
较大的文件则必须采用第二种方式
with open("userdb.txt",mode="rt",encoding="utf-8") as source_f,open("temp.swap",mode="wt",encoding="utf-8") as dst_f:
for line in source_f:
new_line = line.replace("admin","ADMIN")
dst_f.write(new_line)

import os
os.remove("userdb.txt") # 删除源文件
os.rename("temp.swap","userdb.txt") # 将交换文件重命名为源文件名

Python入门8文件处理的更多相关文章

  1. Python入门篇-文件操作

    Python入门篇-文件操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.文件IO常用操作 open:打开 read:读取 write:写入 close:关闭 readlin ...

  2. Python 入门之 文件

    Python 入门之 文件 1.文件操作 找到文件位置 双击打开 进行一些操作 r-read(读) w-write(写) a-追加 rd--读字节 wd--清空写,写字节 ad --追加写(字节) r ...

  3. python入门之文件处理

    1.读取文件 f=open(file="C:\BiZhi\新建文本文档.txt",mode="r",encoding="utf-8") da ...

  4. python入门(5)使用文件编辑器编写代码并保存执行

    python入门(5)使用文件编辑器编写代码并保存执行 两款文本编辑器: 一个是Sublime Text,免费使用,但是不付费会弹出提示框: 一个是Notepad++,免费使用,有中文界面: 请注意, ...

  5. python入门学习:9.文件和异常

    python入门学习:9.文件和异常 关键点:文件.异常 9.1 从文件中读取数据9.2 写入文件9.3 异常9.4 存储数据 9.1 从文件中读取数据 9.1.1 读取整个文件  首先创建一个pi_ ...

  6. Python 入门基础6 --字符编码、文件操作1

    今日内容: 1.字符编码 2.字符与字节 3.文件操作 一.字符编码 了解: cpu:将数据渲染给用户 内存:临时存放数据,断电消失 硬盘:永久存放数据,断电后不消失 1.1 什么是编码? 人类能够识 ...

  7. Python 入门学习(贰)文件/文件夹正则表达式批量重命名工具

    基于 Udacity 的 Python 入门课程 Programming Foundations with Python 基于 Python 2.7 思路 Project 2 是一个去除文件名中所有数 ...

  8. Python入门基础--字符编码与文件处理

    字符编码 文本编辑器存取文件的原理 #1.打开编辑器就打开了启动了一个进程,是在内存中的,所以,用编辑器编写的内容也都是存放与内存中的,断电后数据丢失 #2.要想永久保存,需要点击保存按钮:编辑器把内 ...

  9. [ Python入门教程 ] Python文件基本操作

    本文将python文件操作实例进行整理,以便后续取用. 文件打开和创建 Python中使用open()函数打开或创建文件.open()的声明如下: open(name[, mode[, bufferi ...

随机推荐

  1. 【总结整理】WMS、WMTS、WFS

    参考:http://www.cnblogs.com/naaoveGIS/p/5508882.html WMTS:WMTS是OGC制定的一种发布瓦块地图的Web服务规范,wms主要是动态地图,wmts是 ...

  2. SQl Server 函数篇 聚合函数

    说一下数据库中的聚合函数 函数使用必须加小括号(), 5种聚合函数: 1.max最大值   select max(price) from car where code='c024'   --取这一列中 ...

  3. jmeter CSV Data数据中带有逗号解决方法

    今天用jmeter做性能测试,由于参数的数据中含有逗号,一直失败,尝试了几次终于成功,先写下经验 首先看设置 E:\apache-jmeter-2.12\bin\litaojunzb.csv文件格式如 ...

  4. loj10100 网络

    这个题目描述好难理解呀qwq... 传送门 分析 在读懂题之后我们不难发现这道题实际就是在求一张图中有多少个割点.只需要注意读入方式即可. 代码 #include<iostream> #i ...

  5. 100085G GCD Guessing Game

    传送门 题目大意 给定一个数N,现在又一个数x,在1~N之间,现在每次可以猜一个数a,返回gcd(x,a),问说最少猜几次可以确定x. 分析 这个题应该可以算是贪心,但是没人知道这样为啥是对的(雾), ...

  6. MySQL中的时间问题

    MySQL 获得当前日期时间 函数 获得当前日期+时间(date + time)函数:now() mysql> select now(); +---------------------+ | n ...

  7. 第二周个人作业:WordCount

    github地址 https://github.com/lzwk/WordCount PSP表格 PSP2.1 PSP阶段 预估耗时(分钟) 实际耗时(分钟) Planning 计划 20 40 · ...

  8. java全栈day01-02入门案例

    一  在开始案例之前,我们需要了解一下Java应用程序的编写流程. 通过上图我们可以了解到编写的程序大致如下: 1 源文件:编写Java源文件(我们也称之为源代码文件),它的扩展名为.java: 2 ...

  9. C#实现截图

    语言环境 框架: .NET Framework 3.5IDE: VS2013窗体A(主窗体) /// <summary>/// 点击弹出截屏窗体/// </summary>// ...

  10. 解决VMware Workstation 不可恢复错误: (vcpu-0)

    转载:http://tieba.baidu.com/p/3487673152 如图的错误 如果你按照破解了mac支持的VMware Workstation 11的新建虚拟机向导一步一步创建了一个mac ...