[从零开始学Python]4.文件操作

文件的读写

1.文件的读取

1.按字符读取文件

当我们需要对文件进行操作的时候,首先需要打开文件流

在这里用到了open()函数,open()函数中的参数,必选参数为路径,此处的路径可以填写相对路径或者绝对路径(相对路径更利于文件的迁移)。还有非强制性的参数,有模式参数,'r’以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。

# 按照字符读取文件
f = open('./a.txt','r')
content = f.read(3)
print(content)
f.close()
print('='*50)

如果在执行中遇到了如下的错误提示

UnicodeDecodeError: 'gbk' codec can't decode byte 0xa6 in position 4: illegal multibyte sequence

对于这种无法解码gbk格式的文件,我们可以在open()函数中添加一个参数 encoding=‘utf-8’,即编码格式为utf-8

2.按行读取文件

如果希望读取某个文件中的全部内容,那么可以按行读取,当读取到某一行的长度为0了,那么证明读取完了。

# 按行读取文件
f = open('./a.txt','r',encoding='utf-8')
content = f.readline()
while len(content)>0:
    print(content)
    content = f.readline()
f.close()
print('='*50)

2.文件的写入

写入的操作,首先对文件的打开open()函数中,打开模式应给一个’w’写权限

写入操作可以以字符串为单位进行单一行的写入,还可以以列表为单位进行多行的写入。

# 文件的写入操作
f = open('./b.txt','w')
f.write('hello python\n')
a = ['hello java\n','hello php\n','hello c++\n']
f.writelines(a)
f.close()

OS文件操作模块

在操作系统中,我们经常会用到复制某个文件夹这样的功能,而看似简单的操作背后实际需要很多个步骤,

那么复制一个文件夹到底需要几个步骤呢?

第一步:获取源目录的目录信息,其中一个个路径,既有文件也有目录,(目录是特殊的文件)

第二步:创建一个新的目录

第三步:一条条地判断这些路径,

​ 如果是普通文件,我们就应该把这个文件复制到新的目录中去

​ 如果是目录文件,那么应该递归调用,把这个子目录按照复制目录的方式去处理

在这个过程中我们用到了os模块中的几个函数

os.listdir(path路径)————》用于获取这个路径的目录信息

os.mkdir(dir2)————》用于创建一个新的目录

os.path.join(dir1,f)————》拼接路径,把目录的路径和文件名拼接成一个完整的路径

# 文件复制函数
def copy_file(file1,file2):
    '''
    实现文件的复制
    :param file1: 源文件
    :param file2: 目标文件
    :return: None
    '''
    # 打开源文件和目标文件
    f1 = open(file1,'rb')
    f2 = open(file2,'wb')
    # 循环按行的去复制
    content = f1.readline()
    while len(content)>0:
        f2.write(content)
        content = f1.readline()
    f1.close()
    f2.close()
# 测试用例
copy_file('./a.txt','./c.txt')
import os
# 目录的赋值函数
def copy_path(dir1,dir2):
    '''
    实现目录的复制
    :param dir1: 源目录
    :param dir2: 目标目录
    :return:
    '''
    # 打开源目录
    dlist = os.listdir(dir1)

    # 创建新目录
    os.mkdir(dir2)
    在目录中遍历
    for f in dlist:
        # 把目录进行拼接
        file1 = os.path.join(dir1,f)
        file2 = os.path.join(dir2,f)
        # 判断当前是否为文件
        if os.path.isfile(file1):
            copy_file(file1,file2)
        # 判断当前是否为目录
        if os.path.isdir(file1):
            copy_path(file1,file2)
 # 测试用例
posted @ 2020-02-01 21:02  刘生伟  阅读(6)  评论(0编辑  收藏  举报