文件与文件夹
目录
文件和文件夹函数的意义 | |
– | – |
操作导言 | |
– | – |
操作过程 | |
– | – |
首次操作 | |
– | – |
后来操作 |
文件和文件夹函数的意义
在学习前很重要的一个问题就是:我们了解这些函数有什么用,他们存在是否有意义?
1.编译器数据的储存
首先,我们在训练编程时进行数据处理,得到的数据会在编译器内存储,但是一旦关闭,下次就要重新运行才能得到那批数据,这时候我们就要在程序中打开文件,将数据写入。
2.大量文件的创建
假如某天,我们用网络爬虫趴下来一本小说,但是各章节我们想用多个文件分开进行保存,这时一个个创建写入文件就会变得相当耗时耗力。这时我们就可以用for循环,用程序自动进行多次打开并写入文件,方便快捷,不亦乐乎。
操作导言
说到文件与文件夹,大家能想到那些操作呢。说下我能想到的经常进行的操作吧:
1.创建文件夹
每一批文件都有共同的属性,创建文件夹更便于文件的管理。
2.创建文件
当我们找到素材和自己创作时,想要把内容保存在自己的电脑里,便要创建文件进行保存。
3.写入文件
将需要写入文件的内容输入到文件中去。
4.读取文件
日后打开先前保存的信息。
5.打开文件夹
打开保存相应文件的文件夹。
6.关闭文件
文件使用完毕后要关闭,否则就会占用内存。
7.关闭文件夹
原因同上。
8.转移文件
当发现文件储存错位置时,转移文件的储存位置。
9.删除文件
当发现一个文件已经没有用处的时候,对相应的文件进行及时的删除。
10.复制粘贴文件
将一个文件也能够复制到其同时能够归属的其它文件夹中。
11.对文件及文件夹进行命名
给文件或者文件夹起一个较为相符的名字。
12.对文件及文件夹进行重命名
发现某个文件或者文件夹内容和标题不相对应的时候,对名字进行修改。
暂时想到的就这么多,当我们进行这些操作时,如果我们仅仅是进行数量及其有限的操作时,例如把网页上的一篇文章复制内容到一个TXT文件中时,操作的难度并不大,但是当我们的操作数量增大,变成处理100次,1000次时,手动操作就看起来太枯燥乏味,而且浪费时间了。
那么,我就想着,能不能用python来进行这些操作代码化,让程序帮助我们进行大数目的重复操作呢。
所以,这里我写个对文件和文件夹的常用操作的总结,应该会有一定的用处。
操作过程
首次 | 后来 |
---|---|
创建 | 写入 |
– | – |
写入 | 读取 |
– | – |
打开 | 转移 |
– | – |
关闭 | 删除 |
– | – |
命名 | 复制粘贴 |
– | – |
重命名 |
首次操作
创建and打开and关闭and命名
首先是创建文件夹,这里会用到os库
import os
dirPath='F:\\调试用文件夹'
if(os.path.exists(dirPath)):
print("目录"+dirPath+"已经存在")
else:
os.mkdir(dirPath)
print("创建目录"+dirPath)
代码解读:
1. dirPath是用于表明我们要创建的文件夹的路径以及命名;
2. 下面if…else…是创建新文件夹的步骤:
1.以os.path.exists()函数进行调试,判别我们要创建的文件夹是否存在。括号内为绝对路径。
返回值为布尔属性,存在返回True,不存在返回False。
2.如果不存在,用os.mkdir()函数进行创建。括号内传输的是想要创建的文件夹的绝对路径。
注:
1. 创建文件夹其实就是相当于创建一个子目录,在程序运行过程中并不存在相应的对象。
2.为什么是‘\\’而不是’\‘呢?
是因为在编译的过程中,一些特殊符号有固定的用途,而要在字符串中使用他们(原字符),就要在字符前面加一个’\’。
创建完文件夹后便能够在文件夹中创建文件:
dirPath1='F:\\调试用文件夹\\调试用文件.txt'
new_file=open(dirPath1,'w')
new_file.close()
代码解读:
1. dirPath1是用于表明我们要创建的文件的路径以及命名,这里与创建文件夹类似;
2. 与创建文件夹不同的是,创建文件并不需要os库,只需要用open()函数即可创建并打开相应文件,后面‘w’是文件打开的模式。
3. 当文件使用完毕后,一定要记得关闭文件,用文件对象的close()函数即可关闭该文件。
下面我们要分析下,用open()函数能创建并打开那些类型的文件呢?
经过我尝试,路径下的所有文件都是能够打开的。(不知道是否有反例)
下面我们要列举下文件的打开模式大全:
r | 只读。文件的指针将会放在文件的开头。这是默认模式。 |
– | – |
w | 只写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
– | – |
a | 追加写。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件进行写入。 |
– | – |
r+ | 读写。文件指针将会放在文件的开头。 |
– | – |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
– | – |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
一些个人觉得没用的被我省略了,想看详细版可以参考这个前辈的博客:
> https://blog.csdn.net/chenmozhe22/article/details/81434549
总体来说,我感觉带‘+’肯定要更加方便一些,但是要注意是否会产生覆盖 。以及要注意打开文件时指针的位置。
写入
我们现在能新建并打开文件了,那我们该如何在文件中注入灵魂(进行操作写入)呢?
s='我爱学数学'
new_file.write(s)
代码解析:
写入内容只需要用 文件的write()函数就完事了。
问题:
1.是否可以连续写入?可以的(可以代码验证)
new_file=open(dirPath1,'w')
s='我爱学数学\n'
new_file.write(s)
new_file.write(s)
new_file.write(s)
new_file.write(s)
new_file.close()
注:
当以w或者w+状态打开时候,你的操作会覆盖之前的文件,就是你前面的文件被毁了。。。
所以你如果想接着上次内容进行写入,务必以a或者a+的模式进行写入!!!
后来操作
读取
之前找好了资源,现在我们要来看一看了,怎么看呢?
text=new_file.read()
print(text)
这是文件对象的另一个函数:read(size)函数
size是我们要读取的字节,如果我们要全读,那括号里啥都不写就行。
问题:
1. 是否能连续读?
new_file=open(dirPath1,'r')
text=new_file.read(20)
print(text)
text=new_file.read(20)
print(text)
text=new_file.read(20)
print(text)
text=new_file.read(20)
print(text)
new_file.close()
代码证实:可以。
2. 超额读取会怎样?
text=new_file.read(10000)
print(text)
读取剩余的全部信息。
一次读一行
有时我们并不是按照字节数目读取,也不行一次读完,而是想一行一行读,这时候,就可以用文件对象的readline()函数,读取一行的内容。
text=new_file.readline()
print(text)
问题:
是否能够连续一次读一行(第一次读第一行,第二次读第二行)?
可以的!
new_file=open(dirPath1,'r')
text=new_file.readline()
print(text)
text=new_file.readline()
print(text)
new_file.close()
重命名
首先是对文件夹的重命名
import os
dirPath_1='F:\\调试用文件夹'
dirPath_2='F:\\用于调试的文件夹'
if(os.path.exists(dirPath_1)):
print("目录"+dirPath_2+"已经存在")
os.rename(dirPath_1,dirPath_2)
else:
os.mkdir(dirPath_1)
print("创建目录"+dirPath_2)
代码解析:
用于重命名子目录的函数是os库中的os.rename(name_old,name_new)函数
要注意重命名的前提是前一个子目录已经存在
重命名文件
import os
dirPath_1='F:\\用于调试的文件夹\\调试用文件.txt'
dirPath_2='F:\\用于调试的文件夹\\用于调试de文件.txt'
if(os.path.exists(dirPath_1)):
print(dirPath_2+"已经存在")
os.rename(dirPath_1,dirPath_2)
else:
os.mkdir(dirPath_1)
print(dirPath_2)
和重命名文件夹类似操作,
从这里,我有一个猜想,是否文件的绝对路径也是一个路径呢?
复制粘贴
有时我们想把一个文件复制粘贴到另一个文件夹中,怎么办呢?
其实用我们前面学的就可以了:
1: 打开文件1
2: 读取文件1内容
3: 创立并打开文件2
4: 将文件1内容写入文件2
5: 关闭文件1和文件2
6: over
file_1=open(file_1_dir,'r')
text=file_1.read()
file_2=open(file_2_dir,'w')
file_2.write(text)
file_1.close()
file_2.close()
删除
对于删除,只要用os.remove()函数和os.removedirs()函数即可,既可以删除文件,也可以删除文件夹。
但要注意,删除文件夹时需要保证文件夹为空文件夹,否则就会提示错误。
os.remove()函数 | 删除文件 |
---|---|
os.removedirs()函数 | 删除文件夹(目录) |
os.remove(file_1)
os.removedirs(path)
问题来了,文件好删除,文件夹好删除。那文件中的内容该如何删除掉呢?
这时候就要用到指针了,还记得当时说写入的时候吗。如果指针后面有内容,我们还输入会怎么样呢?
import os
dirPath_2='F:\\用于调试的文件夹\\1.txt'
a=open(dirPath_2,'w')
a.write('hallo hallo i love you')
a.close()
a=open(dirPath_2,'r+')
a.seek(5)
a.write('hahahahah')
a.close()
这里会发现出现了我们想要的结果:(r+)内容部分覆盖,下面我们来说说这个操作可能用到的函数:
f.seek()函数:可以将光标移动到你指定的字节位置
f.tell()函数:返回当前文件可读写的位置(字节数)
转移
至于转移,其实就是说剪切了,其实相当于复制粘贴加删除了,so,运用前面的内容,聪明的小伙伴们自己组合就okk了。
我的第一篇博客就写这么多了,边学边写,虽然是第二遍学习,但是发现讲出来之后自己脑袋里的体系就变得更加清晰了,如有问题,还请各位老爷斧正。
在学习过程中,发现os库中好多函数都是对路径进行操作的,但我目前还没理解对路径操作有啥意义。下一篇要不就是讲一下os库的路径操作,要不就是讲正则表达式。