python(1) 文件与文件夹的那些事

文件与文件夹

目录

文件和文件夹函数的意义
操作导言
操作过程
首次操作
后来操作

文件和文件夹函数的意义

在学习前很重要的一个问题就是:我们了解这些函数有什么用,他们存在是否有意义?
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库的路径操作,要不就是讲正则表达式。

猜你喜欢

转载自blog.csdn.net/qq_45014265/article/details/104180747