even

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

1、文件操作步骤

  • 打开文件
  • 读写操作
  • 关闭文件

2、文件的打开操作

在python中文件的打开用 open函数进行打开,或者创建一个文件,语法如下

open(addr, mode) # addr表示文件的路径, mode表示模式

文件打开的模式

3、文件的读取操作

read(num)
# num表示从文件中读取的内容的长度(单位是字节),如果没有传num, 那么表示读取文件中的所有数据

readlines(num)
# 可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素, num表示读取的行数

readline(num)
# 表示一次读取一行内容,num表示读取前面num个字节

例子

handle = open('./text.txt', 'r')

limit = 10
content = handle.read(limit)

while (content):
    print(content)
    content = handle.read(limit)

handle.close()
handle = open('./text.txt', 'r')

content = handle.readlines()

print(content) # ['this is text\n', 'this is first\n', 'this is second']

handle.close()

seek函数的使用

 文件对象.seek(偏移量,起始位置)

seek函数是用来移动文件指针起始位置的值有:0---文件开头,1---当前位置, 2---文件结尾

路径的相关操作

from os import path
from pathlib import Path

p = Path('c:/a/b/test.html')


print(p.parent)  # 获取路径的dirname

print(p.name)  # 获取路径的basename

print(path.splitext(p)[0]) # 去除后缀名的路径

print(p.suffix)  # 获取路径的扩展名

print(p.joinpath('c://a/b', 'test.html')) #进行路径的拼接

print(path.sep)  # 查看路径的分割符

利用以上相关知识点,实现一个简易版的文件拷贝功能

from os import path
from pathlib import Path

def copyFile(filePath):
    handle = Path(filePath)

    if(not handle.exists()): return
    index = 1
    newFileName = f"{path.splitext(handle.name)[0]}[副本{index}]{handle.suffix}"

    while(path.exists(newFileName)):
        index += 1
        newFileName = f"{path.splitext(handle.name)[0]}[副本{index}]{handle.suffix}"


    newFilePath = path.join(handle.cwd(), newFileName)


    copyTarget = open(filePath, 'rb')
    target = open(newFilePath, 'wb')

    content = copyTarget.read(10)

    while(content):
        target.write(content)
        content = copyTarget.read(10)

    copyTarget.close()
    target.close()


copyFile('./text.txt')

 4、文件夹的操作

# 对文件或者文件夹进行重命名,也可以起到剪切的作用
os.rename(origin, target) 

import os
from os import path

cwd = os.getcwd()  # 获取当前的目录

list = os.listdir(cwd) # 获取当前文件夹的所有文件

for item in list:
    if item.startswith('text['):
        temp = path.join(cwd, item)
        [name, ext] = path.splitext(item)

        # rename表示重命名文件, 也可以进行剪切的功能
        os.rename(temp, path.join(cwd, 'temp', f'{name}1{ext[0:-1]}'))


# 重命名文件夹
os.rename(path.join(cwd, 'temp'), path.join(cwd, 'text'))

os.remove(文件)  删除文件

os.listdir(dirpath)  获取文件夹内文件列表

os.getcwd()  获取当前的目录

 

import os
from os import path

targetFolderName = 'text'

cwd = os.getcwd()

list = os.listdir(path.join(cwd, targetFolderName))

# 把指定文件夹内的所有文件进行删除
for item in list:
    os.remove(path.join(cwd, targetFolderName, item))

os.mkdir(dirpath)  创建文件夹

os.rmdir(dirpath) 删除文件夹

import os
from os import path

cwd = os.getcwd()

targetDir = path.join(cwd, 'temp')

if(not path.exists(targetDir)): os.mkdir(targetDir)  # 如果不存在文件夹,则创建文件夹

print(path.exists(targetDir))

os.rmdir(targetDir)  # 删除文件夹

os.chdir(dirpath) 改变默认目录

import os
from os import path

cwd = os.getcwd()

print(cwd) # D:\pythonCode\learn

os.chdir(path.join(cwd, 'text'))  # 改变当前所在的文件夹指针

print(os.getcwd()) # D:\pythonCode\learn\text

 4、处理json文件

import json


# with...as 是 Python 提供的一种新的 API 上下文管理协议,比传统的 try...finally 的写法更加简洁优雅,且没有 try 所存在的作用域泄露等问题。

# with...as 这个语句,有两个作用。

# 优雅的关闭文件、网络连接、数据库等资源,无需显式调用 f.close() 等方法:
with open('file.json', 'r') as f:
    data = json.load(f)
# 这段代码在读取完文件之后,会自动关闭文件资源。如果不使用 with...as 结构,你就必须记得明确关闭文件:

f = open('file.json', 'r')
data = json.load(f)
f.close()
# 如果在使用文件或网络连接时忘了关闭,就会有文件锁无法放、网络连接耗尽等问题。

# 将变量 f (这里用于指向文件)绑定到一个代码块中:

 

 

 

 

posted on 2023-06-21 21:47  even_blogs  阅读(26)  评论(0编辑  收藏  举报