文件的打开、关闭操作
In [1]: ls
In [2]: f = open("test.py","w") #f只是一个指针,可以通过它来操作文件(名字随便取)
In [3]: ls #由于之前没有test.py文件,因此自动新建了一个
test.py
In [4]: f.close() #关闭文件
In [5]: ls
test.py
文件的读写操作
文件的读取(xx.read)
每次可以读取指定个字节,读完为止
In [1]: f = open("test.py","r")
In [2]: f.read()
Out[2]: 'hello world!\nhi,world\n\nhow ru ?\n'
In [3]: f.read()
Out[3]: ''
In [4]: f.read()
Out[4]: ''
In [5]: f.read()
Out[5]: ''
In [6]: f.close()
In [7]: f = open("test.py","r")
In [8]: f.read(1)
Out[8]: 'h'
In [9]: f.read(1)
Out[9]: 'e'
In [10]: f.read(1)
Out[10]: 'l'
In [11]: f.read(1)
Out[11]: 'l'
In [12]: f.read(1)
Out[12]: 'o'
In [13]: f.read(1)
Out[13]: ' '
In [14]: f.read(1)
Out[14]: 'w'
In [15]: f.read(1)
Out[15]: 'o'
In [16]: f.read(2)
Out[16]: 'rl'
In [17]: f.read(2)
Out[17]: 'd!'
In [18]: f.read(10)
Out[18]: '\nhi,world\n'
In [19]: f.read(10)
Out[19]: '\nhow ru ?\n'
In [20]: f.read(10)
Out[20]: ''
In [21]: f.read(10)
Out[21]: ''
In [22]: f.close()
文件的写入(xx.write)
In [1]: ls
test.py
In [2]: f = open("test1.py","w")
In [3]: ls
test1.py test.py
In [4]: f.write("hahah")
Out[4]: 5
In [5]: f.write("\nhah")
Out[5]: 4
In [6]: f.write("\n-----1-------")
Out[6]: 14
In [7]: f.close()
"""
使用vim查看:
hahah
hah
-----1-------
"""
写个简单的读写小程序做练习
写入
f = open("hello","w")
f.write("hahah")
f.close()
读取
f = open("hello","r") #这里的参数r可写可不写(如果不写默认为r)
print(f.read())
f.close()
写入程序可以顺利把“hahah”写入文件“hello”,读取程序可以顺利把文本“hahah”打印到屏幕
小程序(用户输入要复制的文件名,程序帮忙复制文件内容到另一个文件)
1.获取用户要复制文件的文件名
old_file_name = input("请输入要复制的文件名:")
2.打开要复制的文件
old_file = open(old_file_name,"r")
3.新建一个文件
new_file = open("laowang.txt","w")
4.从旧文件中读取内容,并写入到新文件中
content = old_file.read()
new_file.write(content)
5.关闭两个文件
old_file.close()
new_file.close()
若要把新文件名存为([复件]+原文件名),只需把第三步稍加修改
#new_file = open("laowang.txt","w")
new_file_name = "[复件]"+old_file_name
new_file = open(new_file_name,"w")
完整代码
# 1.获取用户要复制文件的文件名
old_file_name = input("请输入要复制的文件名:")
# 2.打开要复制的文件
old_file = open(old_file_name,"r")
# 3.新建一个文件
#new_file = open("laowang.txt","w")
new_file_name = "[复件]"+old_file_name
new_file = open(new_file_name,"w")
# 4.从旧文件中读取内容,并写入到新文件中
content = old_file.read()
new_file.write(content)
# 5.关闭两个文件
old_file.close()
new_file.close()
若把新文件名写成“原文件名”+[复件]+“原文件扩展名”的格式
我们可以先把“.”号位置找出来,再采取“肉夹馍”的方式对新文件进行命名
# 1.获取用户要复制文件的文件名
old_file_name = input("请输入要复制的文件名:")
# 2.打开要复制的文件
old_file = open(old_file_name,"r")
# 3.新建一个文件
#new_file = open("laowang.txt","w")
#new_file_name = "[复件]"+old_file_name
#----------重点关注----------
#3.1找打.号的位置:
position = old_file_name.rfind(".")
#3.2用“肉夹馍”的方式给新文件命名
new_file_name=old_file_name[0:position] + "[复件]" + old_file_name[position:]
#3.2上一行可以简写为:
#new_file_name=old_file_name[:position] + "[复件]" + old_file_name[position:]
new_file = open(new_file_name,"w")
#--------------------------
# 4.从旧文件中读取内容,并写入到新文件中
content = old_file.read()
new_file.write(content)
# 5.关闭两个文件
old_file.close()
new_file.close()
按行读取(readline(s))
readline与read类似,只是按行读出,readlines会把所有行读出,并以列表的形式展示,其中每一行都是列表的一个元素。
In [1]: f = open("t")
In [2]: f.readline()
Out[2]: 'fhdasufhs\n'
In [3]: f.readline()
Out[3]: '\\fsdkjafghlas\n'
In [4]: f.readline()
Out[4]: 'rg;abkjghads;lg\n'
In [5]: f.readline()
Out[5]: 'adfrlgb\n'
In [6]: f.readline()
Out[6]: 'asdlgba;vk\n'
In [7]: f.readline()
Out[7]: 'dsfguhorwefj\n'
In [8]: f.readline()
Out[8]: "wefgipergv'adsr\n"
In [9]: f.readline()
Out[9]: 'gaeruvh\n'
In [10]: f.readlines()
Out[10]:
['aw,ergh[va\n',
'srgbmvrae\n',
'vbaerbn[ear\n',
'hgthbgu[rka\n',
'bveartihbaebna[sebv\n',
'arew,\n',
'gvbaer[\n']
按字节数读取文件,直到读完
while True:
content = f.read(1024)
if len(content)==0:
break
new_file.write(content)
文件定位读写(文件指针)
默认情况下,xx.read/readline(s)命令会使文件指针跳过已读取部分。我们可以使用xx.seek()命令来修改文件指针的位置,f.tell()命令来查看文件指针当前所在的位置:
#hi文件中包含文本hello,world
In [1]: f = open("hi")
In [2]: f.seek(2,0)
Out[2]: 2
In [3]: f.read()
Out[3]: 'llo,world\n'
In [4]: f.seek(0,0)
Out[4]: 0
In [5]: f.read()
Out[5]: 'hello,world\n'
In [6]: f.tell()
Out[6]: 12
In [7]: f.seek(0,0)
Out[7]: 0
In [8]: f.tell()
Out[8]: 0
In [9]: f.read(1)
Out[9]: 'h'
In [10]: f.tell()
Out[10]: 1
文件、文件夹的常见操作(OS库的使用)
In [1]: ls
copyer.py hi te 'test[复件].py' '[复件]test.py'
duqu.py laowang.txt test1.py xieru.py
hello t test.py '[复件]hello'
In [2]: import os
In [3]: os.rename("hi","hihi") #对文件重命名
In [4]: ls
copyer.py hihi te 'test[复件].py' '[复件]test.py'
duqu.py laowang.txt test1.py xieru.py
hello t test.py '[复件]hello'
In [5]: os.remove("te") #删除文件
In [6]: ls
copyer.py hihi test1.py xieru.py
duqu.py laowang.txt test.py '[复件]hello'
hello t 'test[复件].py' '[复件]test.py'
In [7]: os.mkdir("tt") #创建文件夹
In [8]: ls
copyer.py hihi test1.py tt/ '[复件]test.py'
duqu.py laowang.txt test.py xieru.py
hello t 'test[复件].py' '[复件]hello'
In [9]: os.rmdir("tt") #删除文件夹
In [10]: ls
copyer.py hihi test1.py xieru.py
duqu.py laowang.txt test.py '[复件]hello'
hello t 'test[复件].py' '[复件]test.py'
In [11]: f = open("../xxx.txt","w")
In [12]: f.close()
In [13]: ls ../
10.py 1.py 3.py 5.py 7.py 9.py pydiction/ wenjian/
11.py 2.py 4.py 6.py 8.py bb/ pydiction.zip xxx.txt
In [14]: os.getcwd() #获取当前操作绝对路径
Out[14]: '/home/soarli/Desktop/wenjian'
In [15]: os.chdir("../") #改变操作路径
In [16]: os.getcwd()
Out[16]: '/home/soarli/Desktop'
In [17]: os.listdir("./") #获取目录列表
Out[17]:
['1.py',
'3.py',
'10.py',
'8.py',
'5.py',
'6.py',
'pydiction.zip',
'xxx.txt',
'bb',
'wenjian',
'7.py',
'pydiction',
'11.py',
'4.py',
'2.py',
'9.py']
小程序(批量重命名)
程序源码:
import os
#1.获取要重命名的文件夹名字
folder_name = input("请输入要重命名的文件夹:")
#2.获取指定的文件夹中的所有文件的名字
file_names = os.listdir(folder_name)
os.chdir(folder_name)
#3.重命名
for name in file_names:
print(name)
os.rename(name,"[soarli制作]-"+name)
操作路径:
soarli@soarli:~/Desktop/rename$ tree
.
├── rename.py
└── 权力的游戏
├── 权力的游戏-1.avi
├── 权力的游戏-2.avi
├── 权力的游戏-3.avi
├── 权力的游戏-4.avi
└── 权力的游戏-5.avi
1 directory, 6 files
运行效果:
soarli@soarli:~/Desktop/rename$ python3 rename.py
请输入要重命名的文件夹:权力的游戏
权力的游戏-3.avi
权力的游戏-4.avi
权力的游戏-1.avi
权力的游戏-2.avi
权力的游戏-5.avi
soarli@soarli:~/Desktop/rename$ tree
.
├── rename.py
└── 权力的游戏
├── [soarli制作]-权力的游戏-1.avi
├── [soarli制作]-权力的游戏-2.avi
├── [soarli制作]-权力的游戏-3.avi
├── [soarli制作]-权力的游戏-4.avi
└── [soarli制作]-权力的游戏-5.avi
1 directory, 6 files
程序优化:
import os
#1.获取要重命名的文件夹名字
folder_name = input("请输入要重命名的文件夹:")
#2.获取指定的文件夹中的所有文件的名字
file_names = os.listdir(folder_name)
#os.chdir(folder_name) #去掉了这一行
#3.重命名 #修改了这一段
for name in file_names:
print(name)
old_file_name = folder_name+"/"+name
new_file_name = folder_name+"/"+"[soarli制作]-"+name
os.rename(old_file_name,new_file_name)
运行效果(在上一次运行的基础上):
soarli@soarli:~/Desktop/rename$ python3 rename.py
请输入要重命名的文件夹:权力的游戏
[soarli制作]-权力的游戏-4.avi
[soarli制作]-权力的游戏-2.avi
[soarli制作]-权力的游戏-5.avi
[soarli制作]-权力的游戏-3.avi
[soarli制作]-权力的游戏-1.avi
soarli@soarli:~/Desktop/rename$ tree
.
├── rename.py
└── 权力的游戏
├── [soarli制作]-[soarli制作]-权力的游戏-1.avi
├── [soarli制作]-[soarli制作]-权力的游戏-2.avi
├── [soarli制作]-[soarli制作]-权力的游戏-3.avi
├── [soarli制作]-[soarli制作]-权力的游戏-4.avi
└── [soarli制作]-[soarli制作]-权力的游戏-5.avi
1 directory, 6 files
思考:如何删除前缀
让用户输入要删除的前缀内容,然后根据用户输入位数建立重命名规则,保留相应位数对应的后缀。
版权属于:soarli
本文链接:https://blog.soarli.top/archives/62.html
转载时须注明出处及本声明。