一、文件的使用

1. 文件的定义:

文件是数据的抽象和集合;文件是存储在辅助存储器上的数据序列;文件是数据存储的一种形式;

2. 文件的展现方式:文本文件和二进制文件(两种)

文本文件和二进制文件只是文件的展示方式,从本质上,所有文件都是以二进制形式存储;形式上才有两种方式处理。

2.1 文本文件:


1. 由单一特定编码组成的文件,如UTF-8编码。
2. 由于存在编码,也被看作是存储着的长字符串。
3. 适用于.txt文件和.py文件


2.2 二进制文件:


1. 直接由比特0和1组成,没有统一字符编码。
2. 一般存在二进制0和1的组织结构,即文件格式。
3. 适用于.png文件和.avi文件


2.3 文本文件和二进制文件举例说明

"广西是个美丽的地方"
文本形式:
广西是个美丽的地方
二进制方式:
返回一串由二进制构成的字符串,返回其对应的存储形态的二进制形式。

2.4 文本文件打开:

f.txt文件保存:"广西是个美丽的地方"
#文本形式打开文件代码如下:
tf = open ("f.txt","rt")     #将其赋值给tf,以文本形式打开
print(tf.readline())         #从文本文件中读出一行,输出
tf.close()                   #关闭文本文件

2.5 二进制文件打开:

f.txt文件保存:"广西是个美丽的地方"
#二进制形式打开文件代码如下:
tf = open ("f.txt","rb")     #将其赋值给tf,以二进制形式打开
print(tf.readline())         #从二进制文件中读出一行,输出其对应的真实0和1的格式
tf.close()                   #关闭文本文件

3. 文件的打开和关闭:

文件的处理步骤:打开——操作——关闭

3.1 文件的打开:使用open函数,默认情况下是以文本方式打开文件。

1. 文件的打开和关闭其实就是文件的占用状态和存储状态的转换,打开即为占用状态,关闭即为存储状态

2. <变量名> = open(<文件名>,<打开模式>)

#文件名:代表文件的路径和名称,指的是当前要打开的文件,与当前程序所对应位置之间的关系,源文件同路径可以省略。


3. #打开模式:包括以文本形式打开,或者以二进制形式打开,打开的过程是读信息还是可写信息,文件打开后,文件用一个抽象的变量,文件句柄来表示

4.文件的路径和名称:文件的路径和名称可以是文件的绝对路径和名称。
举例说明如下:

假设在windows操作下有一个文件:E\PYE\f.txt    #在Windows下,文件的路径使用的是\,而在python的字符串中,\是转义符,所以一般来讲,我们在python中需要用/来代替\
在打开文件时,需要指定路径,可以有四种方式:
1.直接给出当前文件的路径:E/PYE/f.txt 或者E\\PYE\\f.txt
#由于在python中,\是转义符,而\\表示的是\的意思,所以也可以表示为:E\\PYE\\f.txt
2.给出相对路径:"./PYE/f.txt"       #当前程序存储在E盘根目录下
#相对路径指打开的文件与当前程序之间的路径,假设当前程序存储在E盘根目录下,则打开PYE下的f.txt 文件,可以指定为:"./PYE/f.txt"
#"./PYE/f.txt"指的是从可执行程序的当前目录起,找到PYE目录,从而打开f.txt
3.给出相对路径:"f.txt"       #当前程序和所开的文件在相同的目录里

5.文件的打开模式:


#'r'——只读模式,默认值,如果文件不存在则返回FileNotFoundError
#'x'——创建写模式,文件不存在则创建文件,存在则返回FileExistsError 可通过try except捕捉这个异常类型。
#'w'——覆盖写模式,文件不存在则创建文件,存在则完全覆盖。
#'a'——追加写模式,文件不存在则创建文件,存在则在文件最后追加内容


6.与打开文件方式相关的模式:


#'b'——二进制文件模式
#'t'——文本文件模式,默认值使用open函数,默认情况下是以t文本方式打开文件
#'+'——表示增加,与/r/w/x/a同时使用,在原功能基础上增加同时读写功能。


打开举例:

f = open("f.txt")      #直接使用open函数打开一个文件,此时open函数默认使用文本形式打开和打开文件是只读模式,在只读模式中,我们不能向文件中写入任何信息
f = open("f.txt","rt")      #直接使用open函数打开一个文件,此时open函数采用rt模式,rt模式就是默认情况的模式,r是读模式,t是文本形式
f = open("f.txt","w")      #文本形式,覆盖写模式,如果文件存在,内容将会被覆盖,如果不存在则创建文件
f = open("f.txt","a+")      #文本形式,追加写模式+读文件,在文件原有内容的后面去写要增加的内容,用a+模式打开文件,除了追加写之外,程序是能够读取文件的内容的,若是只是a,可以向文件中写信息,但是不能从文件中读信息出来。
f = open("f.txt","x")      #文本形式,创建写模式,如果文件不存在,则创建一个并写入信息,如果文件存在,则会产生异常。
f = open("f.txt","b")      #二进制模式,只读模式。
f = open("f.txt","wb")      #二进制模式,覆盖写模式。可以向文件进行覆盖写,但还是二进制形式

3.2 常用的读文件方式:

a.read(size)
a.readline(size)
a.readlines(hint)

1. '<f>.read(size = -1)'——读入全部内容,如果给出参数,读入前size长度。

>>>s = f.read(2)
广西

2. '<f>.readline(size = -1)'——读入一行内容,如果给出参数,读入该行前size长度。

>>>s = f.readline()
广西是个美丽的地方

3. '<f>.readlines(hint = -1)'——读入文件所有行,以每行为元素形成一个列表,如果给出参数,读入前hint行。

>>>s = f.readlines()
['广西是个美丽的地方']                  #生成一个列表

3.3 常用的写文件方式:

a.write(s)
a.writelines(line)
a.seek(offset)

1. '<f>.write(s)'——向文件写入一个字符串或字节流。

>>>f.write("广西是一个美丽的地方")

2. '<f>.writelines(lines)'——将一个元素全为字符串的列表写入文件

>>>ls = ["LG","is","a","dog"]
>>>f.writelines(ls)        #将列表元素拼接后写入
LGisadog

**3. '<f>.seek(offset)'——seek函数是用来改变当前文件操作指针的位置,offset含义如下:0-文件开头;1-当前位置;2-文件结尾

>>>f.seek(0)  #回到文件开头

注意:当一个文件打开,进行文件读取或写入时,对于文件操作存在一个指针,指向当前文件写入后的位置。如果再写信息,会从当前的位置继续向下写,直到文件关闭。在文件打开到文件关闭的这个周期内,文件的操作指针是随着每一次函数的调用的变化而变化。当函数调用之后,希望改变文件操作指针的时,采用seek函数。

fo = open("output.txt,"w+")
ls = ["广西","桂林","上海"]
fo.writelines(ls)       #将列表写入到文件中,写入一个字符串列表  for line in fo:   #将fo中的信息按行打印出来print(line)
fo.close()
>>>没有输出任何信息
修改代码:
fo = open("output.txt,"w+")
ls = ["广西","桂林","上海"]
fo.writelines(ls)       #将列表写入到文件中,写入一个字符串列表
fo.seek(0)
for line in fo:   #将fo中的信息按行打印出来print(line)
fo.close()
注意:当信息被写入文件时,当前文件处理的指针在文件的最后面,写过
信息之后,指针指向文件的最后面,指向下一次可能写入信息的位置。此时
再调用for in方式去遍历一行并且打印输出的时候,指的是从当前位置向文件
的结尾处取出其中的每一行并打印出来,这时已经写过的信息在指针的上方
并不在指针的下方,因此之前的六行代码并不能输出已经写过的信息。为了
输出写过的信息,需要调整当前写入后的指针回到文件的初始位置,从初始
位置开始再进行逐行遍历,能够把文件的全部信息打印出来,所以在之前六
行代码中间增加seek函数。写入ls之后,将指针返回到文件最开始的位置,
从该位置开始去进行文件全文的遍历打印。
输出结果:
广西桂林上海

3.4 文件的关闭:

1. <变量名>.close——使用打开后赋予的文件句柄,直接调用其方法f.close 将文件关闭。
2. 如果在写入的程序中只有文件打开,而没有调用f.close将其关闭,则在文件运行过程中,该文件始终是打开状态
3. 当程序退出时,python的解释器会自动将该文件关闭。在写程序时尽可能调用f.close将程序关闭


3.5 文件的全文本操作:

遍历全文本:一次读入,统一处理,适用于分行存储的文件。
弊端:若文件过大,读入则占用极大内存,没有必要。

fname = input("请输入要打开的文件名称:")
fo = open(fname,"r")       #以只读模式打开文件
txt = fo.read()     #对全文txt进行处理
fo.close()

遍历全文本:一次读入,统一处理(修改代码)

fname = input("请输入要打开的文件名称:")
fo = open(fname,"r")       #以只读模式打开文件
txt = fo.read(2)            #文件中读入两个字节
while txt !=" ":           #只要不为空,则一直读入,对txt进行处理 txt = fo.read(2)
fo.close()

逐行遍历文件:一次读入,分行处理

fname = input("请输入要打开的文件名称:")
fo = open(fname,"r")       #以只读模式打开文件
for line in fo.readlines():     #遍历循环,对fo中所有的信息文本以行的方式生成一个列表print(line)
fo.close()

逐行遍历文件:分行读入,逐行处理

fname = input("请输入要打开的文件名称:")
fo = open(fname,"r")       #以只读模式打开文件
for line in fo:     #fo是文件句柄,使用for in 组合,可以实现对文件print(line)
fo.close()

二、数据的格式化和处理

一个数据表达一个含义,一组数据表达一个或多个含义。

1. 数据维度的定义:

1.1 数据的维度:一组数据的组织形式。

1.2 一维数据:由对等关系的有序或无序数据构成,采用线性方式组织。对应集合、列表、数组等集合概念。
1.3 二维数据:由多个一维数据构成,是一维数据的组合形式。表格是典型的二维数据,其中表头可以作为二维数据的一部分。
1.4 多维数据:由一维或二维数据在新维度上扩展形成。
1.5 高维数据:仅利用最基本的二元关系展示数据间的复杂结构。例如:在字典类型中采用键值对进行有效组织来表达复杂的关系。

2. 一维数据的处理:


数据必须存在才能处理,将数据分为存储(数据在磁盘中的存储状态,关注数据存储格式)、表示(程序表达数据的方式,关注数据的类型)、处理(借助数据类型对数据进行操作)三个部分。


2.1 一维数据的表示:


1. 如果数据间有序:采用列表类型

ls = [3.134,3.1456,3.178]
列表类型是表达一维数据尤其是一维有序数据最合理的结构;
可以使用for循环遍历列表从而对数据进行处理。

2. 如果数据间无序:采用集合类型

st = {3.134,3.1456,3.178}
集合类型是表达一维无序数据最合理的结构;
可以使用for循环遍历集合从而对数据进行处理。

2.2 一维数据的存储:


1.存储方式一:空格分隔,把数据之间用空格进行分隔,使用一个或多个空格分隔进行存储,不换行。
缺点:数据中本身不能存在空格,无法区分空格属于数据还是分隔符

2.存储方式二:逗号分隔,把数据之间用逗号进行分隔,使用一个或多个逗号分隔进行存储,不换行。
缺点:数据中本身不能存在逗号,无法区分逗号属于数据还是分隔符

3.存储方式三:特殊符号分隔,把数据之间用特殊符号进行分隔,使用一个或多个特殊符号分隔进行存储,不换行。
缺点:数据中本身不能存在该特殊符号。


2.3 一维数据的处理:

从空格分隔的文件中读取数据:

广西 桂林 上海 北京 天津
txt = open(fname).read() #使用open打开文件并读取
ls = txt.split() #根据空格分隔字符串中的信息,将每个元素变成一个列表
f.close()
>>>ls
['广西' ,'桂林' ,'上海' ,'北京', '天津']

从特殊符号分隔的文件中读取数据:

广西¥桂林 ¥上海 ¥北京 ¥天津
txt = open(fname).read() #使用open打开文件并读取
ls = txt.split("¥") #根据¥符号分隔字符串中的信息,将每个元素变成一个列表
f.close()
>>>ls
['广西' ,'桂林' ,'上海' ,'北京', '天津']

从一维数据表示的列表形式写入文件的方法:

ls = ['广西' ,'桂林' ,'上海'] #存在一个列表,想采用空格分隔方式写入文件中
f = open(fname,"w") #打开一个文件名称fname,指定打开模式为w,表示写入一个新文件。
f.write(' ',join(ls)) #使用.write写入一个空格加上.join(ls)。
#字符串中的join方法,其作用是指将join前面的字符串分隔,放置到join后面的参数中各个元素之间。比如ls有三个元素,则三个元素之间增加join前面的元素(空格),即在元素之间增加空格。
f.close()
ls = ['广西' ,'桂林' ,'上海'] #存在一个列表,想采用特殊字符分隔方式写入文件中
f = open(fname,"w") #打开一个文件名称fname,指定打开模式为w,表示写入一个新文件。
f.write('¥',join(ls)) #使用.write写入一个空格加上.join(ls)。
#字符串中的join方法,其作用是指将join前面的字符串分隔,放置到join后面的参数中各个元素之间。比如ls有三个元素,则三个元素之间增加join前面的元素(¥),即在元素之间增加¥。
f.close()

3. 二维数据的处理:


数据维度是数据的组织形式:一维数据采用列表(有序)和集合(无序)类型;二维数据采用列表类型,比如表格。


3.1 二维数据的表示:

1. 二维数据一般是一种表格形式,每一行具有相同的格式特点,一般采用列表类型来表达二维数据。该列表并不是简单的列表,而是二维列表
2. 二维列表:本身是一个列表,列表中的每一个元素又是一个列表。其中每一个元素可以代表二维数据的一行或者一列。若干行和若干列组织起来,形成的外围列表,构成所说的二维列表。

3. 使用两层for循环遍历每一个元素,第一层for循环遍历列表的每一个元素,第二层for循环遍历每一个元素其中的元素。


3.2 二维数据的存储:


1. CSV数据存储格式:是数据转换之间通用的数据标准格式
-Comma-Separated Values,指的是用逗号来分隔值的一种存储方式,是国际通用的一二维数据存储形式,一般是采用.csv为文件扩展名。
-每行一个一维数据,采用逗号分隔,无空行,不同行构成另一个维度。
-Excel和一般编辑软件都可以读入或另存为.csv文件。


2. CSV数据存储格式约定:
-如果某个元素在二维数据中缺失,必须要为其保留一个逗号;
-二维数据的表头可以作为数据存储,也可以另行存储 ;
-逗号为英文半角符逗号,逗号和数据之间无额外空格。
-如果数据包含逗号,不同的csv软件具有一些约定,数据两端增加引号,来表达该逗号不是分隔元素的逗号,或者增加一个转义符,来进行区分。


3. 二维数据的存储习惯:
按照行存或者列存都可,根据具体程序决定。
一般的索引习惯是:ls[row][column],先行后列
根据一般习惯,外层列表每个元素是一行,按行存。


3.3 二维数据的读入处理:
从CSV格式的文件中读入数据

包含二维数据的一个二维列表的实现代码;
fo = open (fname)
ls = []
for line in fo:  #读入文件的每一行,把每一行的信息按行存储到列表中作为列表的一个元素line = line.replace("\n"," ") #每一行最后有一个回车,使用replace方法将最后的回车替换为空字符串,替换的新的line参数与之前的相比仅仅去掉了最后的回车ls.append(line.split(",") #line.split按照逗号分隔的方式,将每行中的元素按照逗号分隔开,形成一个列表并增加到ls列表之中作为其中的一个元素。
fo.close()

将保存在列表中的二维数据再写回CSV格式的文件中

ls = [[],[],[]]  #二维列表
f = open(fname,'w')
for item in ls:   #将ls中的每一个元素作为一行写入到文件中f.write(','.join(item) +'\n') #对item元素之间增加逗号,并且最后增加一个\n作为这一行的结尾
f.close()

二维数据的逐一处理:(采用二层循环)

ls = [[1,2],[3,4],[5,6]] #二维列表
for row in ls: #使用遍历其中的每一行for column in row: #遍历其中的每一列print(column)

Python文件和数据格式化学习笔记相关推荐

  1. Python之文件和数据格式化学习笔记

    这是文章目录 1,前言 2,文件的使用 2.1,文件的类型 2.1.1文件的理解 2.1.2,文本文件与二进制文件 2.2,文件的打开和关闭 2.3,文件的内容读取 2.4,数据文件的写入 一维数据的 ...

  2. python永久保存数据_Python学习笔记(四)——文件永久存储

    文件的永久存储 pickle模块的使用 pickle的实质就是将数据对象以二进制的形式存储 存储数据 pickle.dump(data,file) data表示想要存储的数据元素,file表示要将数据 ...

  3. Python文件和数据格式化(教程)

    文件是一个存储在副主存储器的数据序列,可包含任何数据内容. 概念上,文件是数据的集合和抽象,类似的,函数是程序的集合和抽象. 用文件形式组织和表达数据更有效也更加灵活. 文件包括两种形式,文本文件和二 ...

  4. 7 Python文件与数据格式化

    一.标准库OS常用命令 需要先自建一个文件夹,并将当前目录修改为该文件夹. import os os.getcwd() #查看当前路径 os.chdir("C:/Users/盛小胖yx/De ...

  5. python文件与数据格式化

    [一]文件概述 1.文件标识 意义:找到计算机中唯一确定的文件 组成:文件路径.文件名主干.文件扩展名 2.文件类型(文本文件 ,二进制文件) 文本文件:专门存储文本字符数据. 二进制文件:不能直接使 ...

  6. Python 文件与数据格式化

    目录 一.文件概述 二.文件的基本操作 三.文件与目录管理 一.文件概述 1.文件的标识:意义:找到计算机中唯一确定的文件. 组成:文件名主干.文件扩展名以及文件路径. 2.类型:计算机中的文件分为文 ...

  7. python——文件和数据格式化

    一: 文件的打开关闭 文件处理的步骤: 打开-操作-关闭 文件的打开 <变量名> = open("<文件名>, <打开模式>") 打开模式 'r ...

  8. python文件和数据格式化思维导图,思维导图:Numpy+Pandas

    思维导图:Numpy+Pandas 附:文本结构 Numpy+Pandas Numpy 基于矩阵运算的模块 数组转矩阵 A = np.array([[1,2,3],[2,3,4]]) 矩阵属性 ndi ...

  9. python——文件和数据格式化练习题:文件独特行数

    描述 统计附件文件中与其他任何其他行都不同的行的数量,即独特行的数量. 问题分析 这道题是python123课程里面的一道题,我先说一下我的分析过程: 要实现问题找到不同行数,那就要用每一行分别和出它 ...

最新文章

  1. java回顾之继承 二
  2. Linux内核的并发与竞态、信号量、互斥锁、自旋锁
  3. Leetcode 8. 字符串转换整数 (atoi) (每日一题 20210615)
  4. 使用OSOT来优化虚拟桌面2
  5. Tensorflow-gpu在windows系统下的安装及使用(使用Pycharm IDE)
  6. Ubuntu安装 AndroidStudio
  7. wxpython pypi_Python iwx包_程序模块 - PyPI - Python中文网
  8. 使用spring cache和ehcache之前必须了解的
  9. linux很多python进程,Python多进程编程详解
  10. java 编写浏览器_java编写浏览器
  11. 极速版RPS选股,一秒出结果的方案是如何实现的!股票量化分析工具QTYX-V2.5.3...
  12. Python的6种内置对象
  13. BZOJ 2037: [Sdoi2008]Sue的小球(DP)
  14. pixi 平铺精灵 demo (一)
  15. 程序 多核优化 linux,linux 多核CPU性能调优
  16. 体重预测[线性回归]
  17. Could not find a getter for name in class org.tarena.entity1.City
  18. 传奇私服中检查人物穿戴指定装备的两种方法
  19. 数据库系统概论 第十一章课后习题(部分)
  20. windows10安装Sql server 2000

热门文章

  1. 词频统计(python)
  2. app反爬测试之apk逆向分析-frida
  3. Yew 的意义和初步使用体验
  4. PEIF图片文件及python解析
  5. Linux-CentOS XAMPP Apache 支持mp4与flv拖动播放的功能模块
  6. 什么叫计算机硬件特征码,电脑硬件特征码是什么,电脑的全部硬件都有什么用?...
  7. HTML5中设置自适应设备头的各个参数及意义
  8. 计算机硬盘登记表,硬盘软件资源登记表.docx
  9. 中式糕点:有网红的命,也有网红的病
  10. 开源应用中心 | Wordpress、Discuz! Q等应用免代码,极速开通