Python操作文件

简介: Python操作文件,文件操作。打开、关闭、读取、写入、其他

[TOC]

引用:

https://developer.aliyun.com/learning/course/601/detail/8766

Python打开文件

内容简介

一、文件

二、Open 返回值

三、总结

一、文件(file)

在我们的计算机里一切皆是文件,比如说 “01.异常.py” 这是一个文本文件,电脑桌面上的所有图标快捷方式也是文件,随便一个软件打开文件所在位置会发现里面是各种各样的文件,包括看的电影、图片,听的音乐,所有在计算机里存的东西都是文件。我们可以手动的对这些文件进行操作,同样在 python 中也可以通过程序对文件进行操作。

所以,这里所说的文件是指:

1、通过 python 程序对计算机中的各种文件进行增删改查的操作。

2、文件还有另一个名字叫做 i/o(input/output)input 是输入,output 是输出。注意这都是对我们人来讲的,input 是指人通过程序从计算机中读取信息向人输入,同样,output 是指从人这里把一些信息输出到文件里。

3、操作文件的步骤:

①打开文件

②对文件进行各种操作(读、写),然后保存

③关闭文件

这是手工去操作一个文件的步骤。同样在 python 里对文件进行操作也需要经历这三个步骤。

通过 python 创建一个文件名叫 demo.txt 的文件,文件里写入一些文本内容。(【Sublime Text编辑器】中输入 lorem 然后按下 tab 键回车会自动生成内容。这个英文文本没有任何意义,只是一个测试排版的文本。)

现在想要打开 demo.txt 的文件,需要使用 python 的内接函数,找到Python官方文档中的Library Reference,打开 Built-in Functions,找到 open(),找到函数

https://docs.python.org/3/library/functions.html#open
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

复制粘贴进 python。这就是一个打开文件的函数。

例:

file_name='demo.txt'
open(file_name)

这里创建一个变量,来保存文件的名字(路径):file_name='demo.txt' 这时候直接用open(file_name)作为第一个参数传进去,这就是打开file_name对应的文件。如何验证文件是不是打开呢?只要不报错就是打开了。改一个file_name='demo123.txt'执行会发现报错了。

二、open 返回值

返回一个对象,这个对象代表了当前打开的文件。比如file_obj = open(file_name) # 打开 file_name 对应的文件。 直接print(file_obj)保存打印会出现。

file_obj= open(file_name)
print(file_obj)
# 结果:<_io.TextIOWrapper name='demo.txt' mode='r' encoding='cp936'>

表明这个对象确实存在,已经打开了。如果目标文件和当前文件在同一级目录下,则直接使用文件名即可如果不在同一级目录下,这个时候就必须使用完整的路径(相对路径 或 绝对路径):

比如创建一个文件夹名叫 hello ,把 demo.txt 文件移到 hello 里,执行file_name='hello/demo.txt'才能够找到并打开文件。

在 windows 里表示一个路径的时候应该用的是\,但是在这里使用\的话会出现问题,因为 在 python 里 \ 代表的是转义字符。所以在 windows 系统使用路径时,可以使用 / 代替\。或者可以使用 \ 代替 \,或者也可以使用原始字符串。原始字符串就是在字符串前加r比如:

file_name=r'hello\demo.txt这时候里边的转义字符就会被忽略。

现在把 hello 文件夹在往上移一级,file_name=r'hello\demo.txt'这个字符串就没有效果了,所以表示上一级路径,可以使用..来返回上一级目录。

代码:file_name='../hello/demo.txt'。这里..就表示需要从当前目录出来到上一级目录,出来后再去 hello 里边找demo.txt。

如果目标文件距离当前文件比较远,此时可以使用绝对路径。

绝对路径应该从磁盘的根目录开始书写,比如桌面上的快捷方式就需要打开文件所在位置全部复制路径:

file_name='D:\QQ\Bin\QQScLauncher.exe'注意这里\需要改成/或者使用原始字符串加上 r。

这就是一个绝对根路径,保存执行也可以找到目标文件。

三、总结

如果文件在当前目录下直接写文件名,如果不在当前目录下要写路径,如果不在则路径里面用..返回,如果绝对路径比较远,需要使用文件的绝对路径。

关闭文件

目录:

一.对文件进行各种操作。

二.关闭文件。

  1. 对文件进行各种操作
# 要打开的文件
file_name = 'demo.txt'

# 调用open()打开文件
file_obj = open(file_name)

#当我们获取了文件对象以后,所有的对文件的操作都应该通过对象来进行

#读取文件中的内容
# read()方法,用来读取文件中的内容,它会将内容全部保存为一个字符串返回

# 本示例 read 只能读取英文内容。
content = file_obj.read()
print(content)
  1. 关闭文件。
# 方法一: 调用 close()方法关闭文件

file_obj.close()


# 方法二: with...as语句
file_name = 'demo.txt'
try:
    with open(file_name) as file_obj:
        #在 with 语句中可以直接使用 file_obj 来做文件操作
    
        #此时这个文件只能在 with 中使用,一旦 with 结束则文件会自动 close()
    
        print(file_obj.read())
except FileNotFoundError:
    print(f'{file_name} 文件不存在~~')

文件的读取

  • 调用open()来打开一个文件,可以将文件分成两种类型

    • 纯文本文件(使用utf-8等编码编写的文本文件)
    • 二进制文件(图片、mp3、ppt等)

open()打开文件时,默认是以文本文件的形式打开的,默认编码为None

  • 处理文本文件时,必须指定文件的编码

读取大文件

内容简介:

一、read 函数应用

二、读取大文件的方式

一、Read() 函数应用

如果直接调用 read() ,它会将文本文件的所有内容全部都读取出来
如果要读取的文件较大的话,会一次性将文件的内容加载到内存中,容易导致内存泄漏

所以对于较大的文件,不要直接调用 read()
help(file_obj.read)

  • read 可以接收一个size作为参数,该参数用来指定要读取的字符的数量。 默认值为-1, 它会读取文件中的所有字符
  • 可以为size指定一个值,这样read()会读取指定数量的字符,
  • 每一次读取都是从上次读取到位置开始读取的
  • 如果文件中字符的数量小于size,则会读取剩余所有的字符
  • 如果已经读取到了文件的最后了,则会返回''空串
# demo2.txt 内容是中文

file_name = 'demo2.txt'
try:
    with open(file_name, encoding='utf-8') as file_obj:
        content = file_obj.read(6)
        print(content)
        print(len(content))
except FileNotFoundError:
    print(f'{file_name} 文件不存在~~')
file_name = 'demo2.txt'
try:
    with open(file_name, encoding='utf-8') as file_obj:
        # 定义一个变量,来保存文件的内容
        file_content = ''
        # 定义一个变量,来指定每次读取的大小
        chunk = 100
        # 创建一个循环来读取文件内容
        while True:
            # 读取chunk大小的内容
            content = file_obj.read(chunk)

            # 检查是否读取到了内容
            if not content:
                # 内容读取完毕,退出循环
                break
            # # 输出内容
            # print(content,end='')
            file_content += content


except FileNotFoundError:
    print(f'{file_name} 文件不存在~~')

print(file_content)

readline()

该方法可以用来读取一行内容

print(file_obj.readline())

readlines()

该方法用于一行一行的读取内容,它会一次性将读取到的内容封装到一个列表中返回

import pprint

file_name = 'demo2.txt'
try:
    with open(file_name, encoding='utf-8') as file_obj:
        r = file_obj.readlines()

        pprint.pprint(r)

        pprint.pprint(r[0])
        pprint.pprint(r[1])

except FileNotFoundError:
    print(f'{file_name} 文件不存在~~')

for循环读取行

file_name = 'demo2.txt'
try:
    with open(file_name, encoding='utf-8') as file_obj:
        for t in file_obj:
            print(t)

except FileNotFoundError:
    print(f'{file_name} 文件不存在~~')

文件写入

  • write()来向文件中写入内容

    • 如果操作的是一个文本文件的话,则 write( ) 需要传递一个字符串作为参数。即使要写入数字,也需要是字符串类型。
    • 该方法可以分多次向文件中写入内容
    • 写入完成以后,该方法会返回写入的字符的个数
  • 使用 open() 打开文件时指定打开文件所要做的操作类型(读、写、追加)
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
参数 意义
r 只读。默认此mode。 如果文件不存在则报错
w 覆盖写。如果文件不存在会创建文件,如果文件存在则会截断文件。截断文件指删除原来文件中的所有内容
a 表示追加内容
x 用来新建文件, 不覆盖已存在的文件,如果文件存在则报错
+ 为操作符增加功能 (读和写)
r+ 即可读又可写,文件不存在会报错

二进制文件

内容介绍:

一、引入

二、读取模式

三、写出读取内容

一、引入

现在要读取桌面上一个文件:

输入:

file_name = 'c:/Users/lilichao/Desktop/告白气球.flac'

with open(file_name , 'r') as file_obj:
    print(file_obj.read())

结果如下:会报错,无法读

UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 505: illegal multibyte sequence

注意:

要读的 flac 是一个音乐文件,默认读取文件时,是当作文本文件读,而不是文本文件的文件统称为二进制文件

二、读取模式

  • t 读取文本文件(默认值)
with open(file_name , 'r ') as file_obj     # 只写 r 和 rt 是一样的

with open(file_name , 'rt') as file_obj

读取文本文件时, size 是以字符为单位的

  • b 读取二进制文件
with open(file_name , 'rb ') as file_obj

读取二进制文件时,size 是以字节为单位

文件过大,不宜一次性读取,需要分段读

输入:

print(file_obj.read(100) )

三、写出读取内容

file_name = 'c:/Users/lilichao/Desktop/告白气球.flac'

with open(file_name , 'r') as file_obj:
    # 定义一个新的文件
    new_name = 'aa.flac'
    with open(new_name , 'wb') as new_obj:
        # 定义每次读取的大小
        chunk = 1024*100
        
        while True: #从已有的对象中读取数据
            content = file_obj.read(chunk)
            #内容读取完毕,终止循环
            
            if not content :
                break
        
            #将读取到的数据写入到新对象中
            new_obj.write(content)

执行看到多出一个文件

点开后可以播放。

读取位置 seek() 和 tell()

内容介绍:

一、二进制读文件

二、tell( )

三、seek( )

一、二进制读文件

demo.txt 中继续写为 Lorem 的内容,之前以文本形式读取,现在想要以二进制形式去读取

输入

with open('demo.txt' , 'rb') as file_obj:
    print(file_obj.read( ) )

形式与之前文本去读的内容大致无区别,但是前面多了 b ,这表示现在的字符串是一个二进制字符串

输入:

print(file_obj.read( 100 ) )

读取 100 个字符,但读的是二进制,所以实际上是 100 个字节,但是像英文,一个字符就是一个字节,所以似乎没有什么区别

二、tell()

tell() 方法用来查看当前读取的位置

print('当前读取到了-->' , file_obj.tell( ) )

print(file_obj.read( 100 ) )

print(file_obj.read( 30 ) )     # 当前就是读取到130

三、seek()

  • seek() 可以修改当前读取的位置
  • seek() 需要两个参数

    • 第一个 是要切换到的位置
    • 第二个 计算位置的方式

      • 可选值:

        • 0 从头计算,默认值
        • 1 从当前位置开始计算
        • 2 从最后位置开始计算
file_obj.seek(55)

文件内容包含中文时,用seek()时需要考虑汉字所占字节数,不然会报错 UnicodeDecodeError

文件的其他操作

https://docs.python.org/3/library/os.html
https://docs.python.org/zh-cn/3/library/os.html

内容介绍:

一、os.listdir( )

二、os.getcwd( )

三、os.chdir( )

四、os.mkdir( )

五、os.rmdir( )

六、os.remove( )

七、os.rename( '旧名字' , '新名字' )

一、os.listdir( )

获取指定目录的目录结构,需要一个路径作为参数,会获取到该路径下的目录结构,默认路径为 . 当前目录,该方法会返回一个列表,目录中的每一个文件(夹)的名字都是列表中的一个元素

import os

from pprint import pprint

r = os.listdir()
pprint(r) 

二、os.getcwd( )

获取当前所在的目录

输入:

r = os.getcwd( )

pprint(r)

三、os.chdir( )

切换当前所在的目录,作用相当于 cd

输入:

os.chdir( ' .. ' )

r = os.getcwd( )

pprint(r) 

# 再比如输入:
os.chdir( 'c:/' )

四、os.mkdir( )

创建目录 在当前目录下创建一个名字为 aaa 的目录

输入:

os.mkdir("aaa")

五、os.rmdir( )

删除目录

输入:

os.rmdir('aaa')

六、os.remove( )

删除文件

# 先 open( 'aa.txt' , 'w')
os.remove( 'aa.txt' )

七、os.rename( '旧名字' , '新名字' )

os.rename( '旧名字' , '新名字' ),可以对一个文件进行重命名,也可以用来移动一个文件

os.rename( 'aa.txt' , 'bb.txt' )

# 其他写法:
os.rename( 'bb.txt', 'c:/users/lilichao/desktop/bb.txt')

# 文件路径到了桌面
目录
相关文章
|
1月前
|
自然语言处理 数据处理 Python
python操作和解析ppt文件 | python小知识
本文将带你从零开始,了解PPT解析的工具、工作原理以及常用的基本操作,并提供具体的代码示例和必要的说明【10月更文挑战第4天】
331 60
|
1月前
|
安全 Linux 数据安全/隐私保护
python知识点100篇系列(15)-加密python源代码为pyd文件
【10月更文挑战第5天】为了保护Python源码不被查看,可将其编译成二进制文件(Windows下为.pyd,Linux下为.so)。以Python3.8为例,通过Cython工具,先写好Python代码并加入`# cython: language_level=3`指令,安装easycython库后,使用`easycython *.py`命令编译源文件,最终生成.pyd文件供直接导入使用。
python知识点100篇系列(15)-加密python源代码为pyd文件
|
16天前
|
开发者 Python
Python中__init__.py文件的作用
`__init__.py`文件在Python包管理中扮演着重要角色,通过标识目录为包、初始化包、控制导入行为、支持递归包结构以及定义包的命名空间,`__init__.py`文件为组织和管理Python代码提供了强大支持。理解并正确使用 `__init__.py`文件,可以帮助开发者更好地组织代码,提高代码的可维护性和可读性。
17 2
|
1月前
|
Linux 区块链 Python
Python实用记录(十三):python脚本打包exe文件并运行
这篇文章介绍了如何使用PyInstaller将Python脚本打包成可执行文件(exe),并提供了详细的步骤和注意事项。
55 1
Python实用记录(十三):python脚本打包exe文件并运行
|
1月前
|
Java Python
> python知识点100篇系列(19)-使用python下载文件的几种方式
【10月更文挑战第7天】本文介绍了使用Python下载文件的五种方法,包括使用requests、wget、线程池、urllib3和asyncio模块。每种方法适用于不同的场景,如单文件下载、多文件并发下载等,提供了丰富的选择。
|
1月前
|
数据安全/隐私保护 流计算 开发者
python知识点100篇系列(18)-解析m3u8文件的下载视频
【10月更文挑战第6天】m3u8是苹果公司推出的一种视频播放标准,采用UTF-8编码,主要用于记录视频的网络地址。HLS(Http Live Streaming)是苹果公司提出的一种基于HTTP的流媒体传输协议,通过m3u8索引文件按序访问ts文件,实现音视频播放。本文介绍了如何通过浏览器找到m3u8文件,解析m3u8文件获取ts文件地址,下载ts文件并解密(如有必要),最后使用ffmpeg合并ts文件为mp4文件。
|
1月前
|
JSON 数据格式 Python
Python实用记录(十四):python统计某个单词在TXT/JSON文件中出现的次数
这篇文章介绍了一个Python脚本,用于统计TXT或JSON文件中特定单词的出现次数。它包含两个函数,分别处理文本和JSON文件,并通过命令行参数接收文件路径、目标单词和文件格式。文章还提供了代码逻辑的解释和示例用法。
44 0
Python实用记录(十四):python统计某个单词在TXT/JSON文件中出现的次数
|
1月前
|
存储 索引 Python
一文让你搞懂 Python 的 pyc 文件
一文让你搞懂 Python 的 pyc 文件
110 10
|
1月前
|
Python
Python对PDF文件页面的旋转和切割
Python对PDF文件页面的旋转和切割
|
1月前
|
计算机视觉 Python
Python操作PDF文件
Python操作PDF文件
下一篇
无影云桌面