soarli

Python基础语法(文件操作)
文件的打开、关闭操作In [1]: ls In [2]: f = open("test.py"...
扫描右侧二维码阅读全文
07
2020/02

Python基础语法(文件操作)

文件的打开、关闭操作

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

思考:如何删除前缀

让用户输入要删除的前缀内容,然后根据用户输入位数建立重命名规则,保留相应位数对应的后缀。

最后修改:2020 年 04 月 08 日 06 : 12 PM

发表评论