Python 语言及其应用课件 第8章 文件_第1页
Python 语言及其应用课件 第8章 文件_第2页
Python 语言及其应用课件 第8章 文件_第3页
Python 语言及其应用课件 第8章 文件_第4页
Python 语言及其应用课件 第8章 文件_第5页
已阅读5页,还剩69页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8章文件文件的打开与关闭8.1文件读写操作8.2文件的应用8.3本章小结8.4本章实训8.5本章导读38.1文件的打开与关闭5文件的概念文件是指为了重复使用或长期使用的目的,存放于外部存储器中的数据保存形式。文本文件二进制文件8.1文件的打开与关闭6文本文件存储常规的中西文字符、数字、标点等符号,换行常用符号'\n'

表示。使用普通文本编辑工具打开和编辑,人们可以直接阅读和理解文件内容。文本文件(txt)、逗号分隔值(csv)、日志文件(log)、配置文件(ini)等。8.1文件的打开与关闭7二进制文件数据以二进制的形式存储。读取此类文件需要能够解析二进制数据的结构和含义的应用软件。图片文件(jpeg)、视频文件(mpeg)、Windows下的可执行文件(exe)等。8.1文件的打开与关闭8文件写入或读取操作过程(1)打开文件并创建文件对象;(2)通过文件对象对文件中的内容进行读取和写入等操作;(3)关闭并保存文件内容。8.1文件的打开与关闭9open()方法用于打开文件并创建一个文件对象,close()方法用于关闭文件对象。打开的文件使用完毕,必须关闭文件对象以确保对文件中数据的所有改变都写回到文件中,同时释放文件的读写权限,使其他程序可以操作该文件。经常将close()放在异常处理方法中的finally子句下的语句块中,以确保无论程序遇到什么问题都会可以使文件正常关闭。8.1文件的打开与关闭fr=open(file,mode='r',encoding=None)#fr为变量名,是用户为文件对象所命名字

fr.close()10内容管理器由关键字“with”和“as”联合启动,将文件打开操作置于内容管理器中。一旦离开隶属“with…as”的缩进代码范围,文件对象的关闭操作会自动执行,不需要再用close()语句显式的关闭文件。即使上下文管理器范围内的代码因错误异常退出,文件对象的关闭操作也会正常执行。8.1文件的打开与关闭withopen(file,mode='r',encoding=None)asfr:#fr是用户为文件对象所命名字

pass#在缩进区域写对文件对象进行操作的语句withopen(file,mode='r',encoding=None)asfr:#fr是用户为文件对象所命名字

pass#在缩进区域写对文件对象进行操作的语句8.1文件的打开与关闭11带路径的文件名,字符串绝对路径是从根目录开始的完整路径,若反斜杠与后面字符可构成转义字符时,用两个反斜杠表示,或是在路径字符串前面加“r”,r表示raw,明确告诉解释器这个字符串是个原生字符串,不要转义。相对路径是相对当前打开文件位置的路径。文件与程序在相同文件夹下时可不加路径。一般建议使用相对路径。fr=open('c:\temp\next.txt',mode='r',encoding=None)#\t为制表符,\n是换行符,解析会出错fr=open('c:\\temp\\next.txt',mode='r',encoding=None)#\\t解析为\t,\\n解析为\nfr=open(r'c:\temp\next.txt',mode='r',encoding=None)#加r不会对字符串中的特殊字符进行转义withopen(file,mode='r',encoding=None)asfr:#fr是用户为文件对象所命名字

pass#在缩进区域写对文件对象进行操作的语句8.1文件的打开与关闭12指定文件打开的方式和类型缺省时使用默认值'r',以只读方式打开。可以使用'r'、'w'、'x'、'a'、'b'、't'、'+'8.1文件的打开与关闭13表8.1mode参数符号含义符号含义'r'以只读模式打开文件(默认值)'w'以写数据模式打开文件,该文件已存在,先清除该文件中所有内容;该文件不存在,先创建该文件再打开。'x'以创建文件写数据模式打开文件,该文件已存在,打开失败。'a'以追加写数据模式打开文件,该文件已存在,新数据追加在现有数据之后;该文件不存在,先创建文件后在打开。'b'以二进制模式打开文件处理数据't'以文本模式打开文件处理数据(默认模式)'+'打开文件并允许更新,相当于增加读或写模式(与'r'、'w'或'a'组合使用,如'r+'可读可写、'w+'可写可读、'a+'可追加写,可读)withopen(file,mode='r',encoding=None)asfr:#fr是用户为文件对象所命名字

pass#在缩进区域写对文件对象进行操作的语句8.1文件的打开与关闭14指定的编码方式,二进制模式打开文件时,encoding参数不可用。不指定encoding参数时使用当前操作系统默认编码类型(中文windows一般默认GBK编码,Mac和Linux等一般默认编码为UTF-8编码)。实例说明:有一个utf-8编码的文本文件“出塞.txt”,编程读取文件的内容。8.1文件的打开与关闭15实例8.1输出文件内容思路:用open()函数打开文件.要求只读取文件、不修改文件内容,读取模式参数mode的值设为'r'或省略不写。设置encoding='utf-8'参数表示以“utf-8”编码方式处理数据。16f=open('出塞.txt','r',encoding='utf-8')#读模式打开文件#以只读模式打开'静夜思.txt'文件,返回文件对象命名为f,编码为utf-8print(f)实例代码:实例8.1输出文件内容试图用print(f)输出文件内容,输出:<_io.TextIOWrappername=出塞.txt'mode='r'encoding='utf-8’>须用循环逐行输出17文件内容循环逐行输出文件的每一行被当作一个字符串,每个行末有一个换行符“\n”。在用print()函数输出时,行末的换行符“\n”会被解析为一个换行,导致输出的每一行数据后有一个空行存在。可以用strip()方法去掉行末的换行符,使输出时不再有额外的空行。8.1文件的打开与关闭18fr=open('出塞.txt','r',encoding='utf-8')#打开文件创建文件对象,命名为frforlineinfr:#对文件对象进行逐行遍历

print(line.strip())#line.strip()函数去掉行末的换行符,消除空行fr.close()#关闭文件对象实例代码:用循环逐行输出实例8.1输出文件内容19withopen('出塞.txt','r',encoding='utf-8')asfr:

forlineinfr:#对文件对象进行逐行遍历

print(line.strip())#line.strip()函数去掉行末的换行符实例代码:应用内容管理器实现实例8.1输出文件内容8.2文件读写操作8.2.1文件读取方法21表8.2文件读取方法方法描述read(size)无参数或参数为-1时,读取全部文件内容;当参数size为大于或等于0的整数时,读取size个字符。readline(size)无参数或参数为-1时,读取并返回文件对象中的一行数据,包括行末结尾标记'\n',字符串类型。当参数size为大于或等于0的整数时,最多返回当前行的前size个字符。readlines(hint)无参数时,读取文件全部数据,返回一个列表,列表中每个元素是文件对象中的一行数据,包括行末的换行符’\n’。当参数hint为大于或等于0的整数时,读取hint个字符所在的行。seek(offset,whence)改变当前文件操作指针的位置,offset为指针偏移量,whence代表参照物,有三个取值:0文件开始、1当前位置、2文件结尾tell()返回文件指针当前的位置22seek()指针操作方法将文件读取指针移动到文件开头可期望的开始读取位置。offset代表文件指针的偏移量,单位是字节(bytes)。whence代表参照物,有三个取值:whence=0

表示文件开始。0是缺省值,文本和二进制文件都可用。whence=1表示当前位置。whence=2表示文件结尾。当whence=0时偏移量可以设0或正值。当whence=1或whence=2时,在二进制文件中可以设定任意偏移量,在文本文件中,只允许设置偏移量为0,不允许使用其他数字作为偏移量。8.2.1文件读取方法seek(offset,whence=SEEK_SET)对文本文档使用seek()方法时,一般使用seek(0)

将文件指针移动到文件开始位置。当文件是中文、韩文等非西文字符时,一个字符可能占2个字节、3个字节甚至最多6个字节,很难使指针精确移动到一个字的起始位置,导致解码失败,所以非纯西文文件尽量不使用偏移量。23tell()方法获取当前文件指针的位置。8.2.1文件读取方法24read()方法从文本文件中读取并返回最多size个字符,返回的数据类型为字符串。当size为负值或值是None时,从当前位置一直读取到文件结束(EndOfFile,EOF),即读取从文件指针当前所以位置后面的全部剩余字符。如果文件大于可用内存,可以反复调用read(size)方法读取。文本文件中每行末尾的换行符和文中的标点符号都会各占一个字节存储,需要计算在size内。8.2.1文件读取方法read(size=-1)25read()方法8.2.1文件读取方法withopen('出塞.txt','r',encoding='utf-8')asfr:

print([fr.read(20)])

#读取前20个字符放入列表中输出,方便查看换行符

print(fr.read())#读取并输出剩余字符26readline()方法每次只读取一行数据,文件指针移动到下一行开始。当指针已经处于文件末尾时,返回一个空字符串。如果指定了size,将在当前行读取最多size个字符,本行剩余字符少于size时,读取到本行结束。readline()方法通常比readlines()速度慢,仅当没有足够内存可以一次读取整个文件时,才使用readline()方法。8.2.1文件读取方法readline(size=-1)27readline()方法8.2.1文件读取方法withopen('出塞.txt','r',encoding='utf-8')asfr:

print([fr.read(11)])#['出塞\n秦时明月汉时关,']

print(fr.readline(10))#万里长征人未还。28readlines()方法一次读取文件中所有数据行,文件指针一次性就移动到文件结尾处。指定hint参数值来读取的直到指定字符所在的行。8.2.1文件读取方法readlines(hint=-1)withopen('出塞.txt','r',encoding='utf-8')asfr:

print(fr.readlines(4))

#输出['出塞\n','秦时明月汉时关,万里长征人未还。\n']readlines()方法自动将文件内容转成一个列表,列表中每个元素是文件对象中的一行数据,该列表可以由for...in...结构进行处理。29readlines()方法8.2.1文件读取方法withopen('出塞.txt','r',encoding='utf-8')asfr:

print(fr.readlines(4))

#输出['出塞\n','秦时明月汉时关,万里长征人未还。\n']实例说明:《论语》是春秋时期思想家、教育家孔子的弟子及再传弟子记录孔子及其弟子言行而编成的语录文集。全书较为集中地体现了孔子及儒家学派的政治主张、伦理思想、道德观念、教育原则等。作品语言简练,浅近易懂,而用意深远。《论语》自宋代以后,被列为“四书”之一,成为古代学校官定教科书和科举考试必读书。“论语十则中英对照.txt”的内容是中英文对照版本的片断,请将其中英文提取出来。8.2.1文件读取方法30实例8.2提取文件中的英文实例8.2提取文件中的英文31思路:最早的计算机只处理西文字符,所以unicode编码值小于256的都是西文,中文的unicode编码的值均大于256。筛选出unicode编码值小于256的字符拼接成一个字符串。python内置函数ord()可用于获取字符的unicode编码的值。32defread_file():

"""接收文件名为参数,将文件中的内容读为字符串,过滤掉中文(中文字符及全角符号Unicode编码都大于256),返回字符串"""

withopen('论语十则中英对照.txt','r',encoding='utf-8')asnovel:

txt=novel.read()

#读取文件全部内容为字符串

english_txt=''

#初始化英文文本

forcintxt:

#遍历字符串中的每个字符

iford(c)<256:

#字符的Unicode编码小于256的是英文

english_txt=english_txt+c#将英文字符添加到英文文本中

returnenglish_txt#返回英文文本if__name__=='__main__':

print(read_file())#调用函数,输出英文文本实例代码实例8.2提取文件中的英文33open()函数的mode参数设置为‘w’、‘x’、‘a’等具有写权限的模式,或用“r+”给使用读模式打开的文件增加写权限。write()

和writelines()

方法,将指定的字符串和以字符串为元素的列表写入文件,写入到文件中的内容永久保存。8.2.2文件写入方法表8.3文件写入方法方法描述write(b)将给定的字符串或字节流对象写入文件writelines(lines)将一个元素全为字符串的列表写入文件注意:writelines()方法只是将列表内容直接输出,不会自动在每一个元素后面增加换行。所以在构造列表时,在需要换行的位置加入一个换行符'\n',以控制写入一行数据后换到下一行。实例说明:将列表score_ls中的数据分[['姓名','C语言','Java','Python','C#'],['罗明','95','96','85','63'],['朱佳','75','93','66','85']]三行写入到当前路径下的'score.txt'中,再继续把列表score_str中的数据['李思,86,76,96,93\n郑君,88,98,76,90\n']写到文件'score.txt'中。8.2.2文件写入方法34实例8.3写入文件实例8.3写入文件35思路:列表score_ls中的元素仍为列表,子列表的元素是字符串。可以遍历列表,用join()方法将每个子列表中的元素拼接为一个字符串,字符串末尾再拼接“\n”实现换行效果。用write(b)方法将字符串写入到文件对象中。列表score_str中的元素是字符串,可以直接用writelines(lines)方法将其直接写入到文件中。36score_ls=[['姓名','C语言','Java','Python','C#'],['罗明','95','96','85','63'],['朱佳','75','93','66','85']]score_str=['李思,86,76,96,93\n郑君,88,98,76,90\n']withopen('score.txt','w',encoding='utf-8')asf:

forlstinscore_ls:#遍历二维列表,lst是子列表

f.write(','.join(lst)+'\n')

#将子列表转换为字符串,末尾拼接上换行符,将字符串写入文件

f.writelines(score_str)#将元素是字符串的列表写入文件实例代码:实例8.3写入文件8.3文件的应用38CSV文件又称为逗号分隔值,以纯文本形式存储表格数据。由任意数目的记录组成,记录间以逗号或某种换行符分隔。每条记录由字段组成,字段间的分隔符是其他字符或字符串,最常见的是逗号或制表符。一般要求每条记录都有同样的字段序列,文件开头不留空行。如果包含列名,则位于文件第一行。每行数据不跨行,无空行。以半角逗号作分隔符,列为空也要用空字符串表示其存在。字段内容如存在半角单引号('),用半角双引号("")将该字段值包含起来。文件读写时引号,逗号操作规则互逆。内码可为ASCII、Unicode或者其他字符。8.3.1CSV格式文件实例说明:有一个存放学生课程成绩的文件“score.csv”,存有6名同学各4门课的成绩。按要求完成以下操作:(1)请读取文件中的数据,每行数据根据逗号切分为列表,输出二维列表。(2)计算每位同学的总分附加到列表中各门课程成绩后面。(3)根据每名同学的总分进行降序排序输出。(4)将排序后的结果写入到新文件“score_total.csv”中8.3.1CSV格式文件39实例8.4读文件统计成绩实例8.4读文件统计成绩40请读取文件中的数据,每行数据根据逗号切分为列表,输出二维列表。打开文件后对文件进行遍历,读取每行的内容为一个用逗号分隔的字符串,格式为:'罗明,95,96,85,63\n'。用split(',')函数根据逗号切分元素可产生一个列表,形如:['罗明','95','96','85','63'],将这个列表作为一个元素附加到列表ls中,构成一个二维列表。41score=[]#创建空列表withopen('score.csv','r',encoding='utf-8')asfr:#创建文件对象

forlineinfr:#遍历文件对象

line_ls=line.strip().split(',')

#去除换行符并切分为列表

score.append(line_ls)#子列表加入到二维列表中print(score)#输出二维列表实例代码1:实例8.4读文件统计成绩实例8.4读文件统计成绩42计算每位同学的总分附加到列表中各门课程成绩后面将列表序号为0的元素score[0]拼接上['总分']对剩余部分列表score[1:]进行遍历,每次得到一位同学的列表x,切片x[1:]为各门课的成绩用map()函数将每个元素映射为整数,再用sum()函数对其进行求和并附加到列表中。43title=score[0]+['总分']#列表拼接,一维列表score_total=[title]#创建新列表,首元素为原列表标题行增加平均成绩forxinscore[1:]:

#略过标题行进行遍历

total=sum(map(int,x[1:]))#切取成绩部分映射为整数,计算总成绩

score_total.append(x+[str(total)])

#每个列表拼接字符型平均成绩print(score_total)实例代码2:实例8.4读文件统计成绩实例8.4读文件统计成绩44根据每名同学的总分进行降序排序输出用sorted()对二维列表数据中的成绩进行排序,略过标题行,数据排序关键字用匿名函数,排序依据中列表最后一个元素(序号为-1),降序排序。将排序后的新列表与标题行列表再拼接到一起输出。45score_sort=sorted(score_total[1:],key=lambdax:int(x[-1]),reverse=True)score_total_sort=[score_total[0]]+score_sort#将排序后的新列表与标题行列表拼接到一起print(score_total_sort)实例代码3:实例8.4读文件统计成绩实例8.4读文件统计成绩46将排序后的结果写入到新文件“score_total.csv”中在将处理好的数据写回文件时,要注意创建文件对象模式要有写权限,用write()写回数据时,原CSV文件中的分隔符(逗号)需要重新加进去。用join()函数,括号中以序列为参数,指定用半角逗号“,”作为连接符,将序列中的各元素用逗号连接起来。行末的换行符也需要重新加入,以免所有数据写到一行中,换行符的添加可用字符串连接的方式,用“+”将“\n”与列表中的元素连接起来。47withopen('score_total.csv','w',encoding='utf-8')asf:

forxinscore_total_sort:#遍历排序后的二维列表

f.write(','.join(x)+'\n')#将字符串s写入文件,附加到后面#输出二维列表实例代码4:实例8.4读文件统计成绩实例8.4读文件统计成绩48代码优化将不同的处理用独立的函数实现,每段代码都只实现一个功能,容易实现和调试,避免读写模式设置错误或指针位置错误导致出错的问题。列表是可变数据类型,在函数中可以用列表的append()方法直接对列表进行修改,可减少函数参数与返回值的使用。49defwrite_str(filename):

"""接收要写入的列表和文件名为参数,将每个子列表元素用逗号拼接为字符串,在字符串末尾增加一个换行符,将字符串写入到文件中"""

withopen(filename,'w',encoding='utf-8')asf:

forxinscore_sorted:#遍历二维列表

f.write(','.join(x)+'\n')#将字符串写入文件defscore_of_sort():

"""成绩数据按平均成绩降序排序,返回排序的二维列表"""

score_sort=sorted(score[1:],key=lambdax:int(x[-1]),reverse=True)

score_sort=[score[0]]+score_sort#拼接标题行

returnscore_sort优化代码1实例8.4读文件统计成绩50defscore_add_total():

"""用列表附加的方法,为每位同学增加平均分,score是可变数据类型全局变量,可修改"""

score[0].append('总分')#标题行增加'总分'

forxinscore[1:]:#略过标题行进行遍历

total=sum(map(int,x[1:]))#切取成绩部分映射为整数,计算总成绩

x.append(str(total))#每个列表增加字符型平均成绩defread_file(filename):

"""接收表示文件名的字符串为参数,读文件,每行根据逗号切分为列表,加入到同一个列表中,返回二维列表"""

score_lst=[]#创建空列表

withopen(filename,'r',encoding='utf-8')asfr:#打开文件

forlineinfr:#遍历文件对象

line_ls=line.strip().split(',')#去除换行符并切分为列表

score_lst.append(line_ls)#子列表加入到二维列表中

returnscore_lst#返回二维列表优化代码2实例8.4读文件统计成绩51if__name__=='__main__':

file='score.csv'

#定义读取的文件名变量

file_total='score_avg.csv'#定义写入的文件名变量

score=read_file(file)#读文件,二维列表命名为score

score_add_total()#为列表增加总成绩元素

score_sorted=score_of_sort()#排序后的列表命名为score_sorted

write_str(file_total)#写入文件优化代码3实例8.4读文件统计成绩52os库(OperatingSystemLibrary)提供了大量和目录及文件操作相关的方法。使用“importos”语句导入os库。8.3.2文件与文件夹操作8.3.2文件与文件夹操作53表8.4os库常用方法方法描述os.getcwd()获取当前工作路径os.chdir(path)

将当前工作路径修改为path,如os.chdir(r'c:\Users')os.listdir(path='.')以列表形式返回path路径下的所有文件名,不包括子路径中的文件名os.mkdir(path)新建一个名为path的文件夹os.rmdir(path)移除(删除)目录

path,文件夹不为空则报OSError错误os.makedirs(name)递归创建目录,自动创建到达最后一级目录所需要的中间目录os.removedirs(path)递归删除目录,尝试依次删除path中提到的每个父目录os.rename(src,dst)将文件或目录src

重命名为dstos.renames(old,new)递归重命名目录或文件os.remove(file)删除文件

file,文件不存在则报错os.path.isfile(path)如果path是文件,返回True,否则返回Falseos.path.isdir(path)如果path是目录,返回True,否则返回Falseos.path.exists(path)

判断文件夹或文件path是否存在,存在返回True,否则返回Falseos.path.getsize(file)

文件file存在,返回其大小(byte为单位),不存在则报错8.3.2文件与文件夹操作54importosresult=os.getcwd()#getcwd()获取当前工作目录print(result)os.makedirs('D:\\testpath\\path')#递归创建文件夹,路径存在转义字符(\t)时必须用\\转义os.makedirs(r'D:\testpath\path\test')#路径字符串前加r表示原生字符串,不转义os.chdir('D:\\testpath\\path')#改变当前工作目录os.rmdir('test')#rmdir()删除空目录os.chdir('D:\\')

#改变当前工作目录os.removedirs(r'D:\testpath\path')#递归删除空文件夹os库常用操作示例实例说明:将“D:\\testpath\\path”中的文件“XRD.txt”的名字修改为“xrd.txt”,删除该文件夹下的文件XRD.csv。8.3.2文件与文件夹操作55实例8.5文件重命名与删除56importosos.chdir(r'D:\testpath\path\test')#改变当前工作目录os.rename('XRD.txt','xrd.txt')#当前路径下XRD.txt重命名为xrd.txtifos.path.exists('xrd.csv'):#判定欲删除的文件是否存在

os.remove('xrd.csv')#将当前路径下文件xrd.txt删除

print('xrd.csv已经被删除')#删除成功输出提示else:

print('文件xrd.csv不存在')#删除不成功时提示实例代码:实例8.5文件重命名与删除实例说明:在当前路径下的“./stock/”文件夹中存放数量众多的名为类似“600004.csv”的数据文件,每个文件中记录一支股票的交易数据,其中有一条是日期为'2020-06-10'的数据。请将每个文件中日期为“2020-06-10”的数据提取出来,根据逗号切分开,汇总到一个列表中。8.3.2文件与文件夹操作57实例8.6从多文件中提取数据汇总58importosdefread_file(ls):#读取列表中的文件,汇总'Hubei'的数据到一个列表中

data=[['Date','High','Low','Open','Close','Volume','AdjClose']]

forfileinls:#遍历列表中文件名

withopen(dataPath+file,'r',encoding='utf-8')asf:

forlineinf:#遍历文件

x=line.strip().split(',')#文件中的行切分为列表

ifx[0]=='2020-06-10':#若列表首元素为'2020-06-10'

data.append(x)#将这条数据附加到列表data中

returndata#返回每个文件中日期为'2020-06-10'的数据的列表if__name__=='__main__':

dataPath='./12data/csv/stock/'#定义文件所在路径

fileList=os.listdir(path=dataPath)#返回dataPath下文件名列表

print(fileList)#查看文件名列表

print(read_file(fileList))#查看汇总的数据实例代码实例8.6从多文件中提取数据汇总实例说明:“沪市股票top300.csv”中保存有股票代码与股票名,将“./stock/test_rename/”路径下的以股票代码命名的文件统一改名为以股票名为主文件名。8.3.2文件与文件夹操作59实例8.7批量改文件名60importosdefread_to_dic():

"""读股票代码文件,返回以股票代码为键,以股票名为值的字典"""

stock_dic={}#创建空字典

withopen('股票代码.csv','r',encoding='utf-8')asfr:

fr.readline()#跳过第一行标题行

forlineinfr:#遍历文件对象中的每一行

stock=line.strip().split(',')

#去掉行尾的换行符,根据逗号切分为列表

stock_dic[stock[0]]=stock[1]

#以股票代码为键,以股票名为值,存入字典

returnstock_dic#返回股票代码字典实例代码1:实例8.7批量改文件名61defre_name(file_ls):

"""遍历列表中的文件名,修改对应文件名为股票代码对应的股票名,无返回值"""

forlineinfile_ls:#遍历列表中的文件名

os.rename(path+line,new_path+stock_dict.get(line[:-7],line[:-7])+'.csv')

#更名为类似铜冠铜箔.csv...,如果字典中没有对应的股票名,则保持原文件名if__name__=='__main__':

path='./test_rename/'

#当前路径下的test_rename文件夹中有类600006.SH.csv的多个文件

new_path='./newname/'#当前路径下的空文件夹

file_list=os.listdir(path)#获取文件夹中的文件名列表

print(file_list)#['301217.SZ.csv','301218.SZ.csv',...'600009.SH.csv']

stock_dict=read_to_dic()#获取代码与股票名的字典

re_name(file_list)实例代码2:实例8.7批量改文件名实例说明:查看“./data/stock/”路径下的文件名,将其中包含的多个csv文件中的数据合并到一个二维列表中,为每行数据增加股票代码,将其转为json格式写入新文件stock.json中。8.3.2文件与文件夹操作62实例8.8批量处理多个文件中的数据63importosimportjsondeffilename_list(path):

"""接收路径字符串为参数,获取该路径下所有文件名,以列表形式返回os.listdir(path)以列表形式返回path路径下的所有文件名,不包括子路径中的文件名"""

name_list=os.listdir(path)#获取该路径下文件名列表

returnname_list实例代码1:实例8.8批量处理多个文件中的数据64defread_title(file):

"""接收文件名为参数,读取文件第一行为二维列表格式文件第一行为:Date,High,Low,Open,Close,Volume,AdjClose列表格式为:[['Stockcode','Date','High','Low','Open','Close','Volume','AdjClose']]"""

withopen(file,'r',encoding='utf-8')asfile_title:

title=[['Stockcode']+file_title.readline().strip().split(',')]

print(title)

returntitle实例代码2:实例8.8批量处理多个文件中的数据65defread_file(file):

"""接收文件名为参数,略过文件第一行,读取文件内容为二维列表格式将主文件名部分以字符串类型加入,作为每个列表元素第一个元素如文件名为:600000.csv如文件的一行为:2010-0104,9.049530029296875,8.75574016571045,9.032979965209961,8.768150329589844,159964607.0,5.441317081451416列表格式为:['600000',2010-0104,9.049530029296875,8.75574016571045,9.032979965209961,8.768150329589844,159964607.0,5.441317081451416]"""

withopen(file,'r',encoding='utf-

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论