Python
文件读写
stream完成读写: I input /O output
1.写 write output
stream.write("哈哈马上放假!啦啦啦啦啦....\n")
2.读 read input
# 如果test.txt 不存在则报错
stream=open("files/test.txt","r")
content=stream.read()
read(): 读取所有内容
read(length): 指定长度读取 单位为字节
readlines():按行读取数据
list列表方式
readline()
读取文件
read()
一点一点的读
read(length)
第一种方式:
# content= stream.read(512)
# while True:
# if not content: # 文件到了末尾了,是否是一个""
# break
# print(content)
# # 继续读取
# content=stream.read(512)
# stream.close()
readline()
第二种方式:
# content = stream.readline()
# while True:
# if not content:
# break
# print(content,end="")
# # 继续读取
# content = stream.readline()
# stream.close()
readlines()
第三种方式
content=stream.readlines()
print(type(content)) # list
print(content) #
for i in content:
print(i,end="")
stream.close()
复制文件
思路:
源头: test.txt ---->read ---> inputstream
目标: test[副本].txt ----> write ---> outputstream
# 1. 准备文件和对应的流
old_file_name=input("请输入要复制的文件的名称:") # mm.jpg
f_stream= open("files/"+old_file_name,"rb") # inputstream
# 构建新文件名字
position=old_file_name.rfind(".")
suffix=old_file_name[position:]
prefix=old_file_name[:position]+"[副本]"
new_file_name=prefix+suffix
w_stream = open("files/"+new_file_name,"wb") # outputstream
# 2. 进行读写操作
# content = f_stream.read()
# w_stream.write(content)
content = f_stream.read(512)
while True:
if not content:
break
# 写入内容
w_stream.write(content)
# 继续读取
content=f_stream.read(512)
# 3. 关闭流
f_stream.close()
w_stream.close()
print("复制完成!")
文件定位
read() ----> 从开头开始读取
write() ---> w 从开头 a 从结尾
指定位置读写操作:
tell() : 获取当前的位置
seek():
seek(offset, from)有2个参数
offset:偏移量
from:方向
0:表示文件开头
1:表示当前位置
2:表示文件末尾
Python2 中seek的使用
定位到文件开头:支持seek(正数,0);不支持seek(负数,0)
定位到当前位置:支持seek(正数,1),seek(负数,1)
定位到文件末尾:支持seek(正数,2),seek(负数,2)
Python3中的seek
定位到文件开头:seek(0,0),seek(3,0);不支持seek(负数,0);
定义文件当前位置:支持seek(0,1);不支持seek(正,1)和seek(负数,1)
定位到文件末尾:支持seek(0,2);不支持seek(正,2)和seek(负数,2)
OS模块操作
os 模块中 提供了关于文件和文件夹操作
创建文件
4.创建文件
open("jay1.jpg","w")
1. 创建文件夹 mkdir
1.创建文件夹
result=os.mkdir("周杰伦") # 此方法没有返回值 result=None 看有没有报错,报错file Exists 文件已经存在
print(result)
2. 创建多层文件夹 os.makedirs()
3. 删除文件夹 rmdir ---> 空的
6. 删除文件夹
# result=os.rmdir("./周杰伦") # Directory not empty: './周杰伦' 因为文件夹中有内容,rmdir()只能删除空文件夹
# print(result)
4. 删除多层的文件夹 import shutil shutil.rmtree("文件夹")
6.如果文件夹中有内容
import shutil
shutil.rmtree("./周杰伦")
5. 删除文件 os.remove("文件的名字")
6. 获取当前目录 os.getcwd()
2.获取当前目录
result=os.getcwd()
print(result)
7. 改变目录 os.chdir()
3.切换目录
result=os.chdir("./周杰伦")
print(result)makedirs
result=os.getcwd()
print(result)
5. 返回上级 change
os.chdir("../")
result=os.getcwd()
print(result)
8. 重命名文件 rename(old,new)
9. 获取目录中的内容 os.listdir()
os.path.isfile("")
os.path.isdir("") --->判断的 判断是文件还是文件夹
os.path.exists("") --->判断是否存在
批量修改文件名
思路:
第一部分:
创建文件 --->10文件 名侦探柯南
1. 动漫 --->创建文件夹
2. 切换文件路径
3. 循环创建文件
第二部分:
1. 获取所有该目录名字 --->list
2. 遍历列表
定义新的名字 --->old文件切割出来的
3. os.rename(old,new)
'''
import os
# 第一部分
os.mkdir("动漫")
# 改变目录
os.chdir("./动漫")
print("测试当前路径:",os.getcwd())
# 创建文件
for i in range(1,11):
file_name="名侦探柯南-"+str(i)+".avi"
# open()
f = open(file_name,"w")
f.close()
# 第二部分:
file_names=os.listdir()
for name in file_names:
old_file_name=name
# 名侦探柯南[西雅出品]-1.avi
position=old_file_name.find("-")
prefix=old_file_name[:position]
# 前缀
prefix=prefix+"[西雅出品]"
# 后缀
suffix=old_file_name[position:]
new_file_name=prefix+suffix
os.rename(old_file_name,new_file_name)
print(name+"改名成功!")
Python换行符问题
在window中的换行是\r\n,当我们使用程序以文本方式写入一个\n的时候,默认会帮我们加上\r,这样打开文件的时候才能得到换行的效果;
linux -->\n
unix-->\n
mac-->老版本(\r)-->\n
windows -->\r\n
如果是文本文件而不是二进制文件,会自动在\n的前面添加\r,windows认为换行
Linux:因为在wb源文件中确实存在\n,linux中认为\n就是换行
只要是在linux系统下,只要你的源文件中存在\n,就可以实现换行效果
文件是二进制或者普通文本文件,linux都可以识别\n
总结
文件操作:
1.能够读写文件
open ----> 模式: r w a rb wb ab ...
2.读写的方法:
读: read() read(length) readline() readlines()
写: write() writeline()
3.os模块:
文件: os.remove() os.rename() open("","w")
文件夹: os.mkdir() os.makedirs() os.rmdir() import shutil shutil.rmtree
os.chdir() os.getcwd() os.listdir()
批量复制(剪切) py文件到 "python文件" 文件夹中 作业
4. 文件定位: tell() seek()
abcAAAAdef ??? 作业
5. python换行符问题:
linux \n
windows \r\n
作业: 文件版的学生管理系统
添加学生 ----> 姓名 18 男 ---->文件
删除学生 ----> 删除 文件中此行就没有了
张三 18 男
李四 19 男
王五 20 女
list ---> 中删除
----> 写 w
张三 18 男
王五 20 女
修改学生 ----> 有没有这个学生 ---->修改
查询学生
退出
文件读写
stream完成读写: I input /O output
1.写 write output
stream.write("哈哈马上放假!啦啦啦啦啦....\n")
2.读 read input
# 如果test.txt 不存在则报错
stream=open("files/test.txt","r")
content=stream.read()
read(): 读取所有内容
read(length): 指定长度读取 单位为字节
readlines():按行读取数据
list列表方式
readline()
读取文件
read()
一点一点的读
read(length)
第一种方式:
# content= stream.read(512)
# while True:
# if not content: # 文件到了末尾了,是否是一个""
# break
# print(content)
# # 继续读取
# content=stream.read(512)
# stream.close()
readline()
第二种方式:
# content = stream.readline()
# while True:
# if not content:
# break
# print(content,end="")
# # 继续读取
# content = stream.readline()
# stream.close()
readlines()
第三种方式
content=stream.readlines()
print(type(content)) # list
print(content) #
for i in content:
print(i,end="")
stream.close()
复制文件
思路:
源头: test.txt ---->read ---> inputstream
目标: test[副本].txt ----> write ---> outputstream
# 1. 准备文件和对应的流
old_file_name=input("请输入要复制的文件的名称:") # mm.jpg
f_stream= open("files/"+old_file_name,"rb") # inputstream
# 构建新文件名字
position=old_file_name.rfind(".")
suffix=old_file_name[position:]
prefix=old_file_name[:position]+"[副本]"
new_file_name=prefix+suffix
w_stream = open("files/"+new_file_name,"wb") # outputstream
# 2. 进行读写操作
# content = f_stream.read()
# w_stream.write(content)
content = f_stream.read(512)
while True:
if not content:
break
# 写入内容
w_stream.write(content)
# 继续读取
content=f_stream.read(512)
# 3. 关闭流
f_stream.close()
w_stream.close()
print("复制完成!")
文件定位
read() ----> 从开头开始读取
write() ---> w 从开头 a 从结尾
指定位置读写操作:
tell() : 获取当前的位置
seek():
seek(offset, from)有2个参数
offset:偏移量
from:方向
0:表示文件开头
1:表示当前位置
2:表示文件末尾
Python2 中seek的使用
定位到文件开头:支持seek(正数,0);不支持seek(负数,0)
定位到当前位置:支持seek(正数,1),seek(负数,1)
定位到文件末尾:支持seek(正数,2),seek(负数,2)
Python3中的seek
定位到文件开头:seek(0,0),seek(3,0);不支持seek(负数,0);
定义文件当前位置:支持seek(0,1);不支持seek(正,1)和seek(负数,1)
定位到文件末尾:支持seek(0,2);不支持seek(正,2)和seek(负数,2)
OS模块操作
os 模块中 提供了关于文件和文件夹操作
创建文件
4.创建文件
open("jay1.jpg","w")
1. 创建文件夹 mkdir
1.创建文件夹
result=os.mkdir("周杰伦") # 此方法没有返回值 result=None 看有没有报错,报错file Exists 文件已经存在
print(result)
2. 创建多层文件夹 os.makedirs()
3. 删除文件夹 rmdir ---> 空的
6. 删除文件夹
# result=os.rmdir("./周杰伦") # Directory not empty: './周杰伦' 因为文件夹中有内容,rmdir()只能删除空文件夹
# print(result)
4. 删除多层的文件夹 import shutil shutil.rmtree("文件夹")
6.如果文件夹中有内容
import shutil
shutil.rmtree("./周杰伦")
5. 删除文件 os.remove("文件的名字")
6. 获取当前目录 os.getcwd()
2.获取当前目录
result=os.getcwd()
print(result)
7. 改变目录 os.chdir()
3.切换目录
result=os.chdir("./周杰伦")
print(result)makedirs
result=os.getcwd()
print(result)
5. 返回上级 change
os.chdir("../")
result=os.getcwd()
print(result)
8. 重命名文件 rename(old,new)
9. 获取目录中的内容 os.listdir()
os.path.isfile("")
os.path.isdir("") --->判断的 判断是文件还是文件夹
os.path.exists("") --->判断是否存在
批量修改文件名
思路:
第一部分:
创建文件 --->10文件 名侦探柯南
1. 动漫 --->创建文件夹
2. 切换文件路径
3. 循环创建文件
第二部分:
1. 获取所有该目录名字 --->list
2. 遍历列表
定义新的名字 --->old文件切割出来的
3. os.rename(old,new)
'''
import os
# 第一部分
os.mkdir("动漫")
# 改变目录
os.chdir("./动漫")
print("测试当前路径:",os.getcwd())
# 创建文件
for i in range(1,11):
file_name="名侦探柯南-"+str(i)+".avi"
# open()
f = open(file_name,"w")
f.close()
# 第二部分:
file_names=os.listdir()
for name in file_names:
old_file_name=name
# 名侦探柯南[西雅出品]-1.avi
position=old_file_name.find("-")
prefix=old_file_name[:position]
# 前缀
prefix=prefix+"[西雅出品]"
# 后缀
suffix=old_file_name[position:]
new_file_name=prefix+suffix
os.rename(old_file_name,new_file_name)
print(name+"改名成功!")
Python换行符问题
在window中的换行是\r\n,当我们使用程序以文本方式写入一个\n的时候,默认会帮我们加上\r,这样打开文件的时候才能得到换行的效果;
linux -->\n
unix-->\n
mac-->老版本(\r)-->\n
windows -->\r\n
如果是文本文件而不是二进制文件,会自动在\n的前面添加\r,windows认为换行
Linux:因为在wb源文件中确实存在\n,linux中认为\n就是换行
只要是在linux系统下,只要你的源文件中存在\n,就可以实现换行效果
文件是二进制或者普通文本文件,linux都可以识别\n
总结
文件操作:
1.能够读写文件
open ----> 模式: r w a rb wb ab ...
2.读写的方法:
读: read() read(length) readline() readlines()
写: write() writeline()
3.os模块:
文件: os.remove() os.rename() open("","w")
文件夹: os.mkdir() os.makedirs() os.rmdir() import shutil shutil.rmtree
os.chdir() os.getcwd() os.listdir()
批量复制(剪切) py文件到 "python文件" 文件夹中 作业
4. 文件定位: tell() seek()
abcAAAAdef ??? 作业
5. python换行符问题:
linux \n
windows \r\n
作业: 文件版的学生管理系统
添加学生 ----> 姓名 18 男 ---->文件
删除学生 ----> 删除 文件中此行就没有了
张三 18 男
李四 19 男
王五 20 女
list ---> 中删除
----> 写 w
张三 18 男
王五 20 女
修改学生 ----> 有没有这个学生 ---->修改
查询学生
退出