Python文件操作

Python文件操作

1.1.1 文件的打开

在python中,使用open()函数可以打开一个已经存在的文件,或者创建一个新的文件
格式:
   open(文件名,访问模式)

f = open("test.txt","w")

说明     

访问模式                  说明
w    打开一个文件只用于写入,如果该文件已经存在则将其覆盖,如果不存在,创建新文件
r   以只读的方式打开一个文件,文件的指针将会在文件的开头位置,默认模式,如果文件不存在会报错
a   打开一个文件用于追加,如果该文件已经存在,文件的指针会放在文件的结尾,即新的内容将会写入已有内容之后,如果文件不存在,如果文件不存在,创建一个新文件进行写入

r+   打开一个文件用于读写,文件的指针放在文件的开头位置
w+   打开一个文件用于读写,如果该文件已经存在将其覆盖,如果文件不存在,创建一个新文件
a+   打开一个文件用于读写,文件的指针放在文件的末尾位置,,即新的内容将会写入已有内容之后,如果文件不存在,如果文件不存在,创建以一个新文件进行写入

rb 以二进制的方式打开一个文件用于只读,文件的指针将会在文件的开头位置,默认模式,如果文件不存在会报错
wb 以二进制的格式打开一个文件只用于写入,如果该文件已经存在则将其覆盖,如果不存在,创建新文件
ab 以二进制方式打开一个文件用于追加,如果该文件已经存在,文件的指针会放在文件的结尾,即新的内容将会写入已有内容之后,如果文件不存在,如果文件不存在,创建以一个新文件进行写入

rb+   以二进制的方式打开一个文件用于读写,文件的指针放在文件的开头位置
wb+   以二进制的方式打开一个文件用于读写,如果该文件已经存在将其覆盖,如果文件不存在,创建一个新文件
ab+   以二进制的方式打开一个文件用于读写,文件的指针放在文件的末尾位置,,即新的内容将会写入已有内容之后,如果文件不存在,如果文件不存在,创建以一个新文件进行写入

1.1.2 文件的关闭

使用函数:
close()

f = open("test.txt","w")
f.close()

注意:
    作用,节省内存

1.2 文件的读写

1.2.1 写数据(write)

使用write()函数可以完成对文件写入内容
格式:
   write(str)
   
#1.打开文件
f = open('text.txt','w')
#2.写入数据
f.write('hello python\n hello php\nhello java\nhello vb')
#3.关闭文件
f.close()

1.2.2 读取数据(read/readline/readlines)

#1.read(num) 如果读取数据不传参数,表示读取文件所有数据,如果传递参数,表示读取数据的长度(单位是字节)
#打开文件
f = open('text.txt','r')
# str = f.read()  #表示读取所有数据
# print(str)
# str2 = f.read(5)
# print(str2)
# str3 = f.read(10)
# print(str3)
#总结:如果读取文件数据多次,下一次读取是从上一次读取文件结束的位置开始

#2.readline(num)每次读取一行,返回的是字符串,如果传递参数,表示读取一行内容中长度
# content = f.readline()
# print(content)
# content2 = f.readline()
# print(content2)
# for temp in f.readline():
#     print(temp)
# while True:
#     ss = f.readline()
#     if ss == '':
#         break
#     print(ss.strip())

#3.readlines()每次读取一行,把每一行数据作为列表里面的元素,返回的是一个列表
result = f.readlines()
for t in result:
    print(t.strip())

1.2.3 读取CSV文件

导入CSV模块  pdf   图片
import csv

def readCsv(path):#path读取文件的路径
    #定义一个列表接受读取到数据
    readList = []
    with open(path,'r') as a:
        read = csv.reader(a)
        #遍历读取到数据写入到列表readList里面
        for r in read:
            readList.append(r)
    return readList
#调用函数
print(readCsv(r'C:\Users\1\Desktop\csv\000002.csv'))

1.2.4 写入csv数据

import csv

def writeCsv(path,data):
    """
    :param path:写入数据的文件路径
    :param data: 往文件里面写入的数据
    :return:
    """
    with open(path,'w') as w:
        #往打开的文件里写入数据
        write = csv.writer(w)
        for row in data:
            write.writerow(row)
path = r'C:\Users\1\Desktop\yaoming1.csv'
writeCsv(path,[['学号','姓名','年龄','性别'],['1','张三','20','男'],['2','李四','24','男'],['3','王五','28','男']])

1.3 应用—制作文件的备份

任务描述:
输入文件名字,然后程序自动完成对该文件的备份操作:

"""
分析
input--->string
输入你要备份的文件名
                判断是否打开
                        存在
                           1.打开备份的文件
                           2.获取备份的文件名和后缀名
                           3.关闭备份的文件名
                        不存在
实现备份
1.定义新的文件名规则
2.将旧文件里面数据读取出来循环写入到新的文件里面
3.关闭新的文件
"""
import os.path
def copy(path):#path需要备份文件路径
    oldFileName = input('请输入你要备份的文件名:')
    #打开备份的文件
    fileName = open(oldFileName,'r')
    #判断文件是否存在
    if fileName:
        #获取备份的文件名和后缀名
        copyFile = oldFileName.rfind('.')
        name = oldFileName[0:copyFile]
        #splitText(path)可以获取文件的名称和扩展名
        #获取文件的后缀名
        fileFlag = os.path.splitext(path)[1]

        #定义新的文件名规则
        newFileName = name+' - 副本'+fileFlag
        #打开新的文件名,往里面写入数据
        newFile = open(newFileName,'w')

        #读取旧的文件数据往新的文件里面循环写入
        for line in fileName.readlines():
            newFile.write(line)

        #关闭文件
        fileName.close()
        newFile.close()
    else:
        print('该文件不存在')
#调用函数
copy('text.txt')

1.4 文件的定位读写

定为:
   通俗的讲就是找到一个位置

1.获取当前读写文件的位置
在读取文件的过程中,如果想知道当前的位置,
可以使用函数tell()来获取,是光标开始的位置


2.定位到某一个位置
如果在读写文件的过程中,需要从另外一个位置进行操作,可以使用seek()函数
格式:
seek(offset,from)
offset:偏移量字符,给的值正数从左到右读取,给的值负数从右往左
from:方向
    0:表示文件的开头
    1:表示当前位置
    2:表示文件的末尾
       
f = open('text.txt','rb')
str = f.read(5)
print('读取的数据是:',str)
#获取当前读取的位置tell()函数
position = f.tell()
print('当前的位置是:',position)

str2 = f.read(15)
print('第二次读取的数据是:',str2)
postion2 = f.tell()
print('第二次读取的位置是:',postion2)

#重新设置读取的位置 seek()
f.seek(-3,1)
str3 = f.read(3)
print('第三次读取的数据是:',str3)
postion3 = f.tell()
print('第三次读取的位置是:',postion3)

"""
如果使用r模式读取文件,只能从文件开头计算相对位置,程序报错
如果使用rb模式读取文件,程序会正常运行
"""

1.5 文件的重命名

概述:
   需要对文件进行重命名操作,python中有一个模块os模块----》文件的操作
   有一个函数rename()可以完成对文件名的重新命名

格式:
rename(需要修改的文件名,新的文件名)
import os
os.rename('./yaoming.txt','./yaoming2.txt')

1.6 文件的删除

概述:
   os模块中remove()可以完成对文件的删除操作
   
   格式:
      remove(待删除的文件名)
   
   案例:
  os.remove("毕业论文.txt")

2.文件夹的相关操作

2.1 创建一个文件夹

概述:
    使用os模块中mkdir()函数
    
 格式:
 mkdir(待创建的文件名)

案例:
import os
os.mkdir("张三")

2.2 获取当前的目录

概述:
   使用os模块中listdir()函数
   
格式:
  listdir()
  
案例:
import os
print(os.listdir("./"))

2.4 删除文件夹

概述:
   使用os模块中的rmdir()函数
   
 格式:
     rmdir(待删除的文件夹)  

案例:
import os
os.rmdir("张三")

2.5 应用----批量修改文件名(重命名)

例如:网上批量下载电视剧,电视剧名称比较长,我想批量修改剧名

3.StringIO和BytesIO

3.1 StringIO

很多时候,数据读写不一定是文件,也可能在内存中读写
StringIO:在内存中读写str

from io import StringIO,BytesIO
#1.str写入内存 首先创建StringIO() 可以像普通文件一样写入数据
s = StringIO()
str = s.write('hello')
print(str)
str2 = s.write(' ')
print(str2)
str3 = s.write('world')
print(str3)
#getvalue()获取写入内存中的数据
print(s.getvalue())

#str初始化StringIO(),可以像普通文件一样读取
ss = StringIO('hello python\n hello php\n hello abc\n aaaa')
while True:
    rr = ss.readline()
    if rr == '':
        break
    # print(rr.strip())

3.2 BytesIO

StringIO操作---》str
如果操作二进制数据,需要使用BytesIO
BytesIO实现在内存中读写byte数据

#2.str写入BytesIO,创建一个BytesIO(),可以像普通文件一样写入数据
b = BytesIO()
bb = b.write('中国'.encode('utf-8')) #写入的是utf-8转码后的字节
print(bb)
print(b.getvalue())

r = BytesIO(b'\xe4\xb8\xad\xe5\x9b\xbd')
print(r.read())

你可能感兴趣的:(python)