Python(文件的相关操作)

存储在计算机中的一组数据叫做文件 

 gbk——编码格式,每个中文占2个字节,utf—8——每个中文占3个字节

打开文件,如果没有此文件,便会创建一个。

def my_write():
    file=open('a.txt','w',encoding='utf-8')
    #操作文件
    file.write('伟大的中国梦')
    #关闭
    file.close()

#读取
def my_read():
    file=open('a.txt','r',encoding='utf-8')
    s=file.read()
    print(type(s),s)
    file.close()
if __name__=='__main__':
    # my_write()#调用函数
    my_read()
# <class 'str'> 伟大的中国梦

文件在磁盘上未被打开的状态叫存储状态,打开的叫占用状态,关闭文件又恢复到存储状态。

 将文字写入文本并换行:

def my_write(s):
    file=open('a.txt','a',encoding='utf-8')
    file.write(s)
    file.write('\n')
    file.close()

#把列表放进去
def my_write_list(file,lst):
    f=open(file,'a',encoding='utf-8')
    f.writelines(lst)
    f.close()

if __name__=='__main__':
    # my_write('北京欢迎你')
    # my_write('xxxxx')
    lst=['姓名\t','年龄\t','成绩\n','张三\t','30\t','98']
    my_write_list('a.txt',lst)
 
结果:   
伟大的中国梦北京欢迎你
北京欢迎你
xxxxx
姓名	年龄	成绩
张三	30	98
def my_read(filename):
    file=open(filename,'w+',encoding='utf-8')
    file.write('你好啊')#写入完成,文件指针在最后
    #seek 修改文件指针位置
    file.seek(0)
    #读取
    # s=file.read()#读取全部
    # s=file.read(2)#只读取两个字符
    # s=file.readline()#读取一行中的两个字符
    # s=file.readline(2)#读取一行中的两个字符
    # s=file.readlines()#读取所有,一行为列表中的一个元素,s是列表类型
    file.seek(3)#读取’好啊‘,utf-8,一个中文,三个字节
    s=file.read()
    print(type(s),s)
    file.close()
if __name__=='__main__':
    my_read('b.txt')

异常处理应用于所有问题,with语句专门用于关闭文件。 

def write_fun():
    with open('a.txt','w',encoding='utf-8') as file:
        file.write('2022北京欢迎你')

def read_fun():
    with open('a.txt','r',encoding='utf-8') as file:
        print(file.read())

def copy(src_file,target_file):
    with open(src_file,'r',encoding='utf-8') as file:
        with open(target_file,'w',encoding='utf-8') as file2:
            file2.write(file.read())#将读取的内容直接写进文件
if __name__=='__main__':
    write_fun()
    read_fun()
    copy('./a.txt','./b.txt')
    

 

#存储和读取一维数组
def my_write():
    #一维数组,可以使用列表,元组,或集合
    lst=['张三','李四','王五']
    with open('student.csv','w') as file:
        file.write(','.join(lst))#将列表转位字符串

def my_read():
    with open('student.csv','r') as file:
        s=file.read()
        lst=s.split(',')
        print(lst)

#存储和读取二维数据
def my_write_table():
    lst=[
        ['商品名称','单价','采购数量'],
        ['水杯','10','30'],
        ['帽子','30','100']
    ]
    with open('table.csv','w',encoding='utf-8') as file:
        for item in lst:#item的数据类型是列表
            line=','.join(item)
            file.write(line)
            file.write('\n')
# # #读取
def my_read_table():
    data=[]#读取存储的数据
    with open('table.csv','r',encoding='utf-8') as file:
        lst=file.readlines()
        # print(type(lst),lst)#二维数据不能用一维列表读取
        for item in lst:#item是字符串类型
            new_lst=item[:len(item)-1].split(',')#结果位列表
            data.append(new_lst)
        # print(type(lst),lst)
    print(data)

if __name__=='__main__':
     # my_write()
     # my_read()
    #  my_write_table()
    my_read_table()

import json
lst=[
        {'name':'早春','age':18,'score':90},
        {'name':'剩夏','age':21,'score':99},
        {'name':'暖冬','age':19,'score':89}
]
s=json.dumps(lst,ensure_ascii=False,indent=4)
print(type(s)) #?? list-->str,??????
print(s)

#解码
lst2=json.loads(s)
print(type(lst2))
print(lst2)

#编码到文件中
with open('student.txt','w') as file:
        json.dump(lst,file,ensure_ascii=False,indent=4)

#解码到程序
with open('student.txt','r') as file:
      lst3=json.load(file)#不用进行类型转换,直接是列表类型
      print(type(lst3))
      print(lst3)

ensure_ascii=False: 设置为 False 以确保在处理包含中文字符的数据时,输出为原始字符而不是 Unicode 转义序列。

在打开文件进行写入和读取时,使用 encoding='utf-8' 以支持中文字符。

在 Python 文件中包含非 UTF-8 编码的字符,但没有在文件顶部指定编码声明。在包含中文或其他非 ASCII 字符的 Python 脚本中,最好在文件的开头声明编码,以确保 Python 解释器正确处理文件中的字符。

# -*- coding: utf-8 -*-
import json

# 定义包含中文字符的列表
lst = [
    {'name': '张三', 'age': 18, 'score': 90},
    {'name': '李四', 'age': 21, 'score': 99},
    {'name': '王五', 'age': 19, 'score': 89}
]

# 将列表转换为 JSON 字符串,确保中文字符正常显示
s = json.dumps(lst, ensure_ascii=False, indent=4)
print(type(s))  # 输出 <class 'str'>
print(s)

# 将 JSON 字符串转换回 Python 列表对象
lst2 = json.loads(s)
print(type(lst2))  # 输出 <class 'list'>
print(lst2)

# 将 Python 对象写入文件,保存为 JSON 格式
with open('new.txt', 'w', encoding='utf-8') as file:
    json.dump(lst, file, ensure_ascii=False, indent=4)

# 从文件中读取 JSON 格式数据并转换为 Python 对象
with open('new.txt', 'r', encoding='utf-8') as file:
    lst3 = json.load(file)  # 从文件中加载 JSON 数据并转换为 Python 对象
    print(type(lst3))  # 输出 <class 'list'>
    print(lst3)

 

import os
print('当前工作路径:',os.getcwd())#当前工作路径: D:\python object
lst=os.listdir()
print('当前路劲下的所有目录及文件:',lst)#当前路劲下的所有目录及文件: ['.idea', 'main.py', 'new.txt', 'text.py']
#print('指定路径下的所有目录及文件:',os.listdir('D:/python object'))

#创建目录
# os.mkdir('好好学习')#如果文件已经存在程序报错
# os.makedirs('./aa/bb/cc')#连续创建三个具有包含关系的文件
#删除目录
# os.remdir('./好好学习')#./表示当前路径FileNotFoundEorror,如果要删除的目录不存在,程序会报错
# os.removeedirs('./aa/bb/cc')#删除多个文件


#改变当前路径
# os.chdir('D:/pythonpro')
# print('当前的工作路径:',os.getcwd())#在写代码,工作路径就是D:/pythonpro
#不改变python文件的路径,只是运行的路径改变
#遍历目录树,相当于递归操作
for dirs,dirlst,filelst in os.walk('d:/python object'):
    print(dirs)
    print(dirlst)
    print(filelst)
    print('--------------')
    



 合成代码,不可以直接一起运行会报错,可以分部分运行

import os
#删除文件
os.remove('./a.txt') #如果要删除的文件不存在则会直接报错
#重命名
os.rename('./aa.txt','newaa.txt')

#转换时间格式
import time
def date_format(longtime):
    s=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(longtime))
    return s

#获取文件信息
info=os.stat('./newaa.txt')

print(type(info))
print(info)

print('最近一次访问世间:',date_format(info.st_atime))
print('在Windows操作系统中显示的文件的创建时间:',date_format(info.st_ctime))
print('最后一次修改时间:',date_format(info.st_mtime))
print('文件的大小(单位是字节):',info.st_size)

#自动路径下的文件
os.startfile('calc.exe')#可以大开电脑的计算器
#启动python解释器
os.startfile(r'D:\Pycharm\python.exe')


import os.path
# print('获取目录或文件的绝对路径:',os.path.abspath('./b.txt'))
# print('判断目录或文件在磁盘上是否存在:',os.path.exisists('b.txt'))#相对路径Ture
# print('判断目录或文件在磁盘上是否存在:',os.path.exists('newb.txt'))#False
# print('判断目录或文件在磁盘上是否存在:',os.path.exists('./好好学习'))#False
print('拼接路径:',os.path.join('D:/python object/text.py','b.txt'))
# 拼接路径: D:/python object/text.py\b.txt
print('分隔文件的名和文件后缀名:',os.path.splitext('b.txt'))#元组类型
print('提前文件名:',os.path.basename(r'D:\python object\text.py'))#D:\python object

print('判断一个路径是否是有效路径:',os.path.isdir(r'D:\python object\text.py'))#True
print('判断一个路径是否是有效路径:',os.path.isdir(r'D:\python object\there.py'))#False

print('判断一个路径是否是有效文件:',os.path.isfile(r'D:\python object\text.py'))#True
#即判断这个文件是否在文件夹里存在



  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值