关于python中文件和数据的处理

文件分为文本文件和二进制文件,文件的处理步骤是:打开-操作-关闭。

  1. 文件打开
    文件打开使用:<变量名> = f.open(<文件名>,<打开模式>)
  • 文件的路径和名称:由于在Windows平台文件路径中使用的是 \ ,而python语言中 \ 是转义符,所以文件打开的时候路径中出现的 \ 需要转换成 / 或者使用 \\
  • 打开模式:打开模式包括以文本形式打开和以二进制形式打开,打开过程是读信息还是写信息。python提供了几种文件打开模式。分别是:
    - 'r' 只读模式,默认值,如果文件不存在,返回FileNotFoundError
    - 'w' 覆盖写模式,文件不存在则创建,存在则完全覆盖
    - 'x' 创建写模式,文件不存在则创建,存在则返回FileExistsError
    - 'a' 追加写模式,文件不存在则创建,存在则在文件最后追加内容
    - 'b' 二进制文件模式
    - 't' 文本文件模式。默认值
    - '+' 与r/w/x/a一同使用,在原功能基础上同时增加读写功能

例如:

f.open("f.txt")#文本形式、只读模式、默认值

f.open("f.txt", "rt")#文本形式、只读模式、同默认值

f.open("f.txt", "w")#文本形式、覆盖写模式

f.open("f.txt", "a+")#文本形式、追加写模式+读文件

f.open("f.txt", "x")#文本形式、创建写模式

f.open("f.txt", "b")#二进制形式、只读模式

f.open("f.txt", "wb")#二进制形式、覆盖写模式
  1. 文件操作:读和写
  • 读文件函数:f.read(size)、f.readline(size)、f.readlines(hint)
f.read(size=-1)#读入全部内容,如果给出参数size,读入前size长度

f.readline(size=-1)#读入一行内容,如果给出参数,读入改行前size长度

f.readlines(hint=-1)#读入文件所有行,以每行为元素形成列表,如果给出参数,读入前hint行

例如:

#遍历全文本,方法1
fname = input("请输入要打开的文件名称")
fo = open(fname,"r")
txt = fo.read()#遍历全文本的一种方法,一次读入,统一处理
fo.close()
#遍历全文本,方法2
fname = input("请输入要打开的文件名称")
fo = open(fname,"r")
txt = fo.read(2)#每次读入两个字节
while txt != " ":
    txt = fo.read(2)#按数量读入,逐步处理  
fo.close()
#逐行遍历文件:方法1
fname = input("请输入要打开的文件名称:")
fo = open(fname, "r")
for line in fo.readlines()#一次读入,分行处理
    print(line)
fo.close()
#逐行遍历文件:方法2
fname = input("请输入要打开的文件名称:")
fo = open(fname, "r")
for line in fo:#分行读入,逐行处理
    print(line)
fo.close()
  • 写文件函数:f.write(s)、f.writelines(lines)、f.seek(offset)
f.write(s)#向文件写入一个字符串或字节流

f.writelines(lines)#将一个元素全为字符串的列表写入文件

f.seek(offset)#改变当前文件操作指针的位置,
#offset含义如下:0-文件开头;1-当前位置;2-文件结尾

例如:

fo = open("output.txt", "w+")
ls = ["中国","法国","美国"]
fo.writelines(ls)#写入一行字符串列表
for line in fo:
     print(ls)
#print预期输出是“中国法国美国”,实际上没有任何输出。
#因为此时写入信息后文件指针在文件写入后的位置,而写入的信息在指针上方而不是下方,此时应将指针改变到写入信息的上方方可遍历输出
fo.close()
#改变后的代码
fo = open("output.txt", "w+")
ls = ["中国","法国","美国"]
fo.writelines(ls)
fo.seek(0)#让指针回到文件的初始位置
for line in fo:
     print(ls)#输出“中国法国美国”
fo.close()
  1. 文件关闭
    <变量名>.close()

一维数据对应列表、数组和集合等概念,二维数据由多个一维数据构成,是一维数据的组合形式。多维数据由一维或二维数据在新维度上扩展形成。高维数据:仅利用最基本的二元关系(键值对)展示数据间的复杂结构。

  • 数据的操作周期:存储(存储格式)-表示(数据类型)-操作(操作方式)
  • 一维数据
    1 一维数据的表示:
    如果数据间有序:使用列表类型
    如果数据间无序:使用集合类型
    2 一维数据的存储:
    存储方式1:空格分隔,不换行。缺点:数据中不能存在空格
    存储方式2:逗号分隔,不换行。缺点:数据中不能存在逗号
    存储方式3:使用其他特殊符号或符号组合分隔。缺点:需要根据数据特点定义,通用性较差。
    3 一维数据的处理:
    这里的处理是指将存储的数据读入程序或将程序表示的数据写入文件。

例如:

#从空格分隔的文件中读入数据
txt = open(fname).read()
ls = txt.split()
f.close()
#采用空格分隔方式写入数据
ls = ["中国","美国","日本"]
f = open(fname,"w")
f.write(" ".join(ls))
#join方法是将join前面的字符串分割放置到后边的join参数中的各个元素之间
f.close()
  • 二维数据
    1 二维数据的表示:
    使用列表(二维列表)表达二维数据,使用两层for循环遍历每个元素
    2 CSV格式与二维数据存储
    - CSV格式:使用逗号分隔值的一种存储方式,为国际通用的一二维存储格式,以.csv作为扩展名。其中每行一个一维数据,采用逗号分隔,无空行。若某个元素缺失,逗号仍要保留,其中的逗号采用的是英文半角符号,逗号与数据之间无额外空格。
    二维数据存储:既可以按行存,也可以按列存。一般先行后列。
    3 二维数据的处理
#读入处理:从CSV文件中读入数据
fo = open(fname)
ls =  [ ]
for line in fo :
    line = line.replace("\n"," ")#将数据每行最后一个回车符换成空格
    ls.append(line.split(","))    
fo.close()
#写入处理:将数据写入CSV格式的文件
ls =[[ ],[ ],[ ]]#二维列表
f = open(fname, 'w')
for item in ls:
    f.write(" ".join(item)+"\n")
f.close()
#二维数据的逐一遍历
ls = [[1,2],[3,4],[5,6]]#二维列表
for row in ls:
    for column in row:
         print(column)
  • eg1:
    题目来自python123.io平台
#参考代码
f = open("latex.log")
s, c = 0, 0
for line in f:
    line = line.strip("\n")
    if line == "":
        continue
    s += len(line)
    c += 1
print(round(s/c))
  • eg2:
    题目来自python123.io平台
#参考代码
f = open("data.csv")
ls = f.readlines()
ls = ls[::-1]
lt = []
for item in ls:
    item = item.strip("\n")#去掉每行最后的换行符
    item = item.replace(" ", "")#去掉每行元素两侧的空格
    lt = item.split(",")
    lt = lt[::-1]
    print(";".join(lt))
f.close()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355