九、Python文件

这篇博客详细介绍了Python中如何进行文件操作,包括文件的读取、写入、位置控制及不同类型的文件(如TXT, JSON, CSV, EXCEL)处理。通过open()函数打开文件,并强调了文本文件和二进制文件的区别。" 81096218,4957417,无分隔符字典问题解决:回溯法与Java实现,"['回溯法', '算法设计', 'Java编程', '字典问题']
摘要由CSDN通过智能技术生成

一、Python文件读取简介

文件(File)
通过Python来对计算机中的各种文件进行增删改查的操作;
I/O(Input/Output)

操作文件的步骤:
1、打开文件
2、对文件进行各种操作(读、写)
3、关闭文件

调用open()来打开一个文件,可以将文件分成两种类型:一种是纯文本文件(使用utf-8等编码写的文本文件);一种是二进制文件(图片、音频、PPT等文件)。open()这个函数打开文件时,默认是以文本文件的形式打开的。

文本文件之外的文件都是二进制文件。

#open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
#使用open打开一个文件
#参数:
#file:要打开文件的名字(或路径);
#返回值:返回的是一个对象,这个对象就是代表了当前打开的文件;
#如果目标文件和当前文件在同一级目录下,则直接使用文件名即可打开。
file_obj=open('demo.txt')

#read()方法来读取文件的内容,它会将内容全部保存到一个字符串返回。
content=file_obj.read()
print(content)

#关闭文件
file_obj.close()

#with ... as 语句
with open('demo.txt') as file_obj:
    #在with语句中可以直接使用file_obj来操作文件
    #此时这个文件只能在with中使用,一旦with结束文件则会自动close()关闭。
    print(file_obj.read())

#标准的读写代码的格式如下:
filename='demo1.txt'
try:
    with open(filename) as file_obj:
        # 在with语句中可以直接使用file_obj来操作文件
        # 此时这个文件只能在with中使用,一旦with结束文件则会自动close()关闭。
        print(file_obj.read())
except FileNotFoundError:
    print(f'{filename} 文件不存在...')

二、文件的读取

1、较大文件的读取

filename='demo1.txt'
try:
    with open(filename,encoding='utf-8') as file_obj:
        # 通过read()函数来读取文件的内容,它会将文本内容全部读取,
        #如果要读取的内容文件比较大的情况,会一次性将文件内容加载到内存中,容易导致内存溢出。
        #read()函数可以接收一个size作为参数,该参数用来指定读取的字符的数量,默认值是-1,它会读取文件中所有的字符。
        #可以为size指定一个值,这样read()函数会读取指定数量的字符,
        #每一次读取都是从上次读取到的位置开始读取,如果字符的数量小于size,则会读取剩余所有的字符
        # content=file_obj.read(7)
        # print(content)
        # print(len(content))
        # 调用open()来打开一个文件,可以将文件分成两种类型:
        #一种是纯文本文件(使用utf-8等编码写的文本文件);
        #一种是二进制文件(图片、音频、PPT等文件)。
        #open()这个函数打开文件时,默认是以文本文件的形式打开的。
        #处理文本文件时,有时候需要制定文件的编码

        i=100
        #创建一个循环来读取文件内容
        while True:
            content = file_obj.read(i)
            #设置停止条件
            if not content:
                break
            print(content,end='')

except FileNotFoundError:
    print(f'{filename} 文件不存在...')

2、其他的读取方式

filename = 'demo.txt'
with open(filename,encoding='utf-8') as file_obj:
    #readlines()该方法也是用于一行一行的读取内容,它会将读取到的内容封装到列表中返回。
    print(file_obj.readlines())
    #readline()该方法时逐行读取文件
    file_obj.seek(0)#回到文件起始位置
    print(file_obj.readline())

三、文件的写入

1、文本文件的写入

filename='demo.txt'
with open(filename,mode='w',encoding='utf-8') as file_obj:
    #write()向文件中写入内容
    #如果要操作的是一个文本文件的时候,write()函数需要我们传递一个字符串作为参数
    #使用open()函数打开文件时需要制定打开文件所要的操作(读、写、追加)
    #如果不指定操作类型,默认是以读取文件的方式打开,而读取文件是不能向文件中去写入的

    #r,表示只读
    #w,表示可以写,所以我们可以使用w来写入文件,如果文件不存在则会创建文件,如果文件存在,则会覆盖源文件中的内容。
    #a,表示追加内容,如果文件不存在则会创建文件,如果文件存在则会向文件中追加内容。
    #+,为操作符增加功能
    #r+,即可读又可以写,文件不会报错
    #x,用来创建文件,如果文件不存在则创建文件,如果文件存在就报错
    file_obj.write('afag\n')

2、二进制文件的读写

#读取模式
#t,读取文本文件(默认)
#b,读取二进制文件,rb,读取二进制文件,wb,写入二进制文件

filename=r'C:\Users\fjcheng\Desktop\陈小春 - 独家记忆.mp3'
with open(filename,mode='rb') as file_obj:
    #读取文本文件时,size是以字符为单位
    #读取二进制文件时,size是以字节为单位

    #将读取的内容写出来
    #定义一个新的文件
    new_name='abc.mp3'
    # print(file_obj.read(100))
    with open(new_name,'wb') as new_obj:
        #定义每次读取的大小
        c=1024*100
        while True:
            #从已有的对象中读取数据
            content=file_obj.read(c)

            #内容读取完毕,循环终止
            if not content:
                break

            #将读取到的数据写入新的对象中
            new_obj.write(content)

四、读取文件的位置

#读取文件的位置
with open('demo.txt','rb') as file_obj:
    print(file_obj.read(5))
    #tell()该方法用来检查当前读取的位置

    #seek()可以修改当前读取的位置,也可以对中文进行操作,如果中文是utf-8时,seek(n),n必须为3的倍数,utf-8,一个中国字占3个字节
    #参数:
        #0,从头开始,默认
        #1,从当前位置
        #2,从最后位置计算
    print('当前读取到了-->',file_obj.tell())

五、文件的其他操作

#文件的其他操作
import os
#listdir()获取当前目录结构
# r=os.listdir('.')
# os.chdir('c:/')#切换盘符
#os.getcwd()获取当前所在的目录
r=os.getcwd()
#创建目录
os.mkdir('abc')#在当前目录下创建目录
#删除目录
os.rmdir('abc')
print(r)

六、TXT/JSON/CSV/EXCEL文件处理

'''
一、TXT文件操作

1、打开文件
file=open(filename,mode)
filename :文件名
mode :模式(打开文件的模式),有以下几种:
r-->read,只读方式,文件不存在时,程序报错;默认的打开方式
w-->write,只写方式,文件不存在时,程序会创建一个文件,程序正常
a-->append,追加方式,文件不存在,程序会创建一个文件,程序正常

2、文件操作(读写)
2.1读操作
read-->读取全部文件
readline-->逐行读取
readlines-->返回列表,每一行就是列表中的一个元素
2.2写操作
write-->写,'w'会覆盖文件中已有的内容,'a'追加的方式写入
3、关闭文件
close

'''
file=open('demo.txt','w')

# print(file.readable())
# print(file.read())
# print(file.readline())
# print(file.readlines())

file.write('hello world')
file.write('\nPython')#这两个是按顺序同时写入的

file.close()

'''
with操作:上下文管理器
包括了异常处理,自动调用文件关闭操作,推荐使用
'''
with open('demo.txt','r') as f:
    data=f.read()
    print(data)
#练习:创建两个文件,一个文件中放入‘人生苦短,我用python’,
#一个文件读取刚才创建的文件内容,中文使用utf-8编码的
with open('demo1.txt','w',encoding='utf-8') as f:
    f.write('人生苦短,我用python')

with open('demo1.txt','r',encoding='utf-8') as f:
    data=f.read()
    print(data)

'''
二、JSON文件操作
json是一种轻量级的数据交换格式。json源自JavaScript语言,
易于人类的阅读和编写,同时也易于机器解析和生成,
是目前应用最广泛的数据交换格式

json是跨语言,跨平台的,但只能对Python的基本数据类型做操作,
对Python的类就无能为力。JSON格式和Python中的字典非常像。
但是,json的数据要求用双引号将字符串引起来,并且不能有多余的逗号。

JSON的文件操作
1、写操作
json.dump()-->写入文件中
json.dumps()-->写入字符串变量

2、读操作
json.load()-->从文件中读取
json.loads()-->从字符串变量中读取
'''
import json
s='json'
json.dump(s,open('json.txt','w'))

s=json.dumps(['hello world',{'name':'jingang'}])
print(s)#["hello world", {"name": "jingang"}],json的字符串

p=json.load(open('json.txt','r'))#参数为文件的对象
print(p)

'''
三、CSV文件操作
以纯文本形式存储的表格数据(以逗号作为分隔符),通常第一行为列名
可以使用Excel打开文件
'''
import csv
#newline:是新行,默认为None,None也要占一行,要想中间没有空行,需要将newline=''
with open('demo2.csv','w',newline="") as f:
    # f.write('hello world')#一个字符串,不建议用这种方式写

    #dialect默认打开方式是Excel
    csvwriter=csv.writer(f,dialect='excel')
    print(csvwriter)
    csvwriter.writerow(['a','b','c'])
    csvwriter.writerow(['a1', 'b1', 'c1'])

rf=open('demo2.csv')
reader=csv.reader(rf)
print(reader)

#生成器:next取值,或者用for循环
# print(next(reader))#逐行读取
# print(next(reader))

for i in reader:
    print(i)

'''
四、Excel文件
Excel和CSV的区别:
1、都可以用Excel程序打开
2、Excel除了文本,数据也可以包含图表、样式等
3、CSV每条记录都存储为一行文本文件,每一条新行都表示一个新的数据记录

Excel文件操作
1、读取操作
import xlrd
book=xlrd.open_workbook('1.xls')
sheet=book.sheet_by_index(0)#获取第一个sheet
print(sheet.nrows)#获取行数
print(sheet.cell(1,1))#获取单元格的值,根据行列号
print(sheet.row(1))#获取第一行
print(sheet.row_values(1,1))#获取第一行,跳过第一列
2、写入操作
book=xlwt.Workbook()
wsheet=book.add_sheet('sheet1')
wsheet.write(0,0,label='name')#表的编行列号是从0开始的

book.save('demo2.xls')
'''
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值