python-03

使用File操作文件

open(file, mode='r', buffering=-1,encoding=None, errors=None, newline=None, closefd=True, opener=None)

file:要打开的文件

mode:文件打开模式。默认访问模式是读(r)

buffering:缓冲区大小

encoding:文件编码类型

errors:编码错误处理方法

newline:控制通用换行符模式的行为

closefd:控制在关闭文件时是否彻底关闭文件

opener:通过传递可调用对象opener,可以使用自定义开启器

r只读方式。文件指针放在文件开头。这是默认模式
rb二进制只读。指针在文件开头
r+读写。指针在文件开头
rb+二进制读写。指针在文件开头
w只写。该文件已存在则覆盖。不存在则创建
wb二进制只写。该文件已存在则覆盖。不存在则创建
w+读写。该文件已存在则覆盖。不存在则创建
wb+二进制读写。该文件已存在则覆盖。不存在则创建
a追加内容。该文件已存在则指针在文件的结尾。不存在则创建
ab二进制追加。该文件已存在则指针在文件的结尾。不存在则创建
a+读写。该文件已存在指针在文件的结尾。不存在则创建
ab+二进制读写。该文件已存在则指针在文件的结尾。不存在则创建

 file.closed:如果文件已被关闭返回True,否则返回False

file.mode:返回打开文件的访问模式

file.name:返回文件的名称

file.close()关闭文件

file.flush()

刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件
file.fileno()返回一个整形的文件描述符
file.isatty()如果文件连接到一个终端设备返回True,否则返回False
file.next()返回文件下一行
file.read([size])从文件读取指定的字节数,如果未给定或为负则读取所有内容
file.readline([size])读取整行,包括“\n”字符
file,readlines([sizeint])读取所有行并返回列表,若给定sizeint>0,返回总和大约为hint字节的行,实际读取值可能比sizeint大些
file.seek(offset[,whence])设置文件当前位置
file.tell()返回文件当前位置
file.truncate([size])截取文件,截取的字节通过size指定,默认为当前文件位置
file.write(str)将字符串写入文件,返回的是写入的字符长度
file.writelines(lines)向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符
fo = open('重要学习文件.txt',"wb")
print("文件名:",fo.name)
print("是否已关闭:",fo.closed)
print("访问模式:",fo.mode)

fileObject.closed():方法close用于关闭一个已经打开的文件,关闭后的文件不能再进行读写操作,否则会触发ValueError错误。在程序中可以多次调用close()方法,当File对象被引用到操作另外一个文件时,Python会自动关闭之前的File对象。

内置函数next()遍历文件中的下一行。

如果到达结尾(EOF),则触发StopIteration异常

next(iterator[, default])

fo = open('456.txt','r')
print('文件名为:',fo.name)
for index in range(4):
    line = next(fo)
    print("第%d行-%s"%(index, line))
fo.close()

file.read([size]):从目标文件中读取指定的字节数,如果没有给定字节数或参数为负,则读取所有内容。

fo = open("销售数据.txt",'r+')
print('文件名为:', fo.name)
line = fo.read(8)
print("读取的数据:%s"%(line))
fo.close()

使用OS对象

os.access(path, mode):检验对当前文件的操作权限模式。

path:是否有访问权限的路径

mode:测试当前路径的模式,以下4种

os.F_OK:测试path是否存在

os.R_OK:测试path是否可读

os.W_OK:测试path是否可写

os.X_OK:测试path是否可执行

import os,sys
ret = os.access(r"123\456.txt",os.F_OK)
print("F_OK - 返回值%s"% ret)
ret = os.access(r"123\456.txt", os.R_OK)
print("R_OK - 返回值%s"% ret)
ret = os.access(r"123\456.txt", os.W_OK)
print("W_OK -返回值%s"%ret)
ret = os.access(r"123\456.txt",os.X_OK)
print("X_OK - 返回值%s"%ret)

os.chdir(path):修改当前工作目录到指定的路径。

path:表示要切换到的新路径

返回值:允许修改则返回True,否则返回False

import os,sys
path = '123'
retval = os.getcwd()  # 获取当前文件的工作目录
print("学习资料的保存位置是:%s"%retval)
os.chdir(path)
retval = os.getcwd()
print("目录修改成功%s"%retval)

os.chmod(path, mode):修改文件或目录的操作权限

path:文件名路径或目录路径

mode:不同权限级别,文件权限以“用户id->组id->其他”的顺序进行检验

import os, stat
os.chmod("123\数据库下载地址.txt",stat.S_IXGRP) # 设置文件可以通过用户组执行
os.chmod("123\数据库下载地址.txt",stat.S_IWOTH) # 设置文件可以被其他用户写入
print("修改成功")

 os.open(file, flags[, mode]):打开一个文件,返回新打开文件的描述符

os.write(fd, str):写入字符串到文件描述符fd指向的文件中,返回实际写入的字符串长度。

fd:文件描述符

str:写入的字符串

os.closed(fd):关闭指定文件的描述符fd,没有返回值。

fd:文件描述符

import os
fd = os.open("收视率.txt",os.O_RDWR|os.O_CREAT)
str = "XX好声音的收视率是:2.271"
ret = os.write(fd, bytes(str,"UTF-8"))
print("写入的位数为: ")
print(ret)
print("写入成功")
os.close(fd)
print("关闭文件成功")

os.read(fn, n):从文件描述符fd指向的文件中读取最多n个字节的内容,返回含读取字节的字符串。文件描述符fd对应的文件已达到结尾时,返回一个空字符串。

import os
fd = os.open("财务预算计划.txt",os.O_RDWR) # 以读写方式打开文件
# 读取文件中的8个字符
ret = os.read(fd, 8)
print(ret)
os.close(fd)
print("关闭文件成功")

os.mkdir(path [, mode]):以数字权限模式创建目录,默认的模式为0777(八进制)。

返回值:返回包含读取字节的字符串。

path:表示要创建的目录

mode:表示要为目录设置的权限数字模式

os.makedirs(path, mode=0o777):递归创建目录。创建包含子目录的文件夹目录。

import os
path = "迅雷电影/2022/科幻"
os.makedirs(path)
print("路径被创建")

其他文件操作模块

import fileinput
def demo_fileinput():
    with fileinput.input(['123.txt', '456.txt']) as lines:
        for line in lines:
            print('总第%d行,'%fileinput.lineno(),'文件%s中第%d行:'%(fileinput.filename(),fileinput.filelineno()))
            print(line.strip())
if __name__ == "__main__":
    demo_fileinput()

 

fileinput内置方法:

input(): 返回能够用于迭代一个或多个文件中所有行的对象。

filename():返回当前文件的名称

lineno():返回当前读取的行的数量

isfirstline():返回当前行是否是文件的第一行

filelineno():返回当前读取行在文件中的行数

import os
filenames = []
for a,b,files in os.walk('test'):  # 获取当前目录‘test’中的所有文件
    if files:
        filenames.append([file[:-4] for file in files]) # 设置扩展名为3个字母
fname = 'Excel'
i = 0
for files in filenames:
    f = open(fname+str(i)+'.xls','w')
    for name in files:
        f.write(name[-4:]+'\t'+name[:4]+'\n')
    f.close()
    i += 1

 

有时需要提取多个文件的文件名,并且要求提取文件名的不同部分。此时可以使用for遍历整个目录中的内容,然后使用write()函数将文件名写入指定文件中。

通过方法os.walk()对test目录下的所有文件进行遍历,获取所有记事本的文件名字符串,并保存到列表filenames中,根据指定的电子表格文件名将文件名中的内容写入Excel文件。

 

  • 26
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值