ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python文件和数据格式化

2022-07-19 18:33:22  阅读:136  来源: 互联网

标签:文件 格式化 python 列表 字符串 str print open


一、文件的使用

 

 

 

文件的打开模式
打开模式 含义
r 只读模式,如果文件不存在则返回异常
w 覆盖写模式,文件不存在则创建,存在则完全覆盖
x 创建写模式,文件不存在则创建,存在则返回异常
a 追加写模式,文件不存在则创建,存在则在源文件的最后追加内容
b 二进制文件格式
t 文本文件模式,默认值
+ 与r/w/x/a一起使用,在原功能上增加同时读写功能

在Python语言中,负责文件操作的称为文件对象,文件对象不仅可以访问存储在磁盘中的文件,也可以访问网络文件。

文件对象通过open函数得到,获取文件对象后,就可以使用文件对象提供的方法来读写文件。

open()打开函数

open函数的基本语法如下:

open(name[, mode[, buffering]])

参数说明:

  • name : 一个包含了你要访问的文件名称的字符串值。

  • mode : mode 决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。

  • buffering : 如果 buffering 的值被设为 0,就不会有寄存。如果 buffering 的值取 1,访问文件时会寄存行。如果将 buffering 的值设为大于 1 的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。

需要注意的问题

1.XXX.py文件需要与XXX.txt文件保存到同一个根目录下。当一个需要打开的文件名称不带路径时,open函数会在Python程序运行的当前目录寻找该文件,在当前目录下如果没有找到该文件,open函数抛出异常IOError。

2.在运行过程中出现‘gbk’codec can't decode byte……的错误代码

    解决方案::A-另存txt文件覆盖到原目录,以utf-8的格式进行保存。B-在file-setting-code style-file encodings中改文件格式为utf-8,其中BOM为:with no BOM。C-将open代码修改为如下所示:(即:增加一个encoding的代码来修改保存格式)

f=open("a.txt","rt",encoding='utf-8')

  

file 对象方法

  • file.read([size]):size 未指定则返回整个文件,如果文件大小 >2 倍内存则有问题,f.read()读到文件尾时返回""(空字串)。

  • file.readline():返回一行。

  • file.readlines([size]) :返回包含size行的列表, size 未指定则返回全部行。

  • for line in f: print line :通过迭代器访问。

  • f.write("hello\n"):如果要写入字符串以外的数据,先将他转换为字符串。

  • f.tell():返回一个整数,表示当前文件指针的位置(就是到文件头的字节数)。

  • f.seek(偏移量,[起始位置]):用来移动文件指针。

    • 偏移量: 单位为字节,可正可负
    • 起始位置: 0 - 文件头, 默认值; 1 - 当前位置; 2 - 文件尾
  • f.close() 关闭文件

文件读取方法
方法 含义
f.read(size=-1) 从文件中读取整个文件内容。读入前size长度的字符串或者字节流
f.readline(size=-1)

从文件中读入一行内容。line-行数

for row in XX:

     for item in row:

        <对第row行的第item列元素进行处理>

f.readlines(hint=-1)

line多加了一个s,代表从文件中读取所有的行,并且以每行的元素组成一个列表。

参数可选,如果给出,读入hint行。

f.seek(offset)

每次print()读取完f.read()后,读取指针会在文件的末尾,再次调用f.read的相关函数已经无法从当前位置读取任何内容。

f.seek(offset)就是改变读取指针的位置,f.seek(0)将读取指针移动到文件的开头,f.seek(2)将移动到文件结尾。

 

在D:\下建立一个新的txt文件,内容为:’ABCDEFG‘

1 f=open("D:/test.txt","r")
2 s=f.read()
3 print(s)
4 ABCDEFG
5 f.seek(0)
6 Is=f.readlines()
7 print(Is)
8 ['ABCDEFG']
9 f.close()
文件写入方法
方法 含义

f.write(s)

向文件写入一个字符串或者字节流
f.writelines(lines) 将一个元素为字符串的列表整体写入文件

 

 

二、数据组织的维度

一维数据:线性特点

二维数据:表格特点

高维数据:HTML、XML、JSON等具体数据组织的语法结构

三、一维数据的处理

CSV:用逗号分隔的储存格式

下列要用到的函数源代码:strip();split();join();

strip():

Python strip() 方法用于移除字符串头尾指定的字符(默认为空格)或字符序列。

注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。

str.strip([chars]);

参数

  • chars -- 移除字符串头尾指定的字符序列。

返回值

返回移除字符串头尾指定的字符序列生成的新字符串。

实例

以下实例展示了 strip() 函数的使用方法:

实例(Python 3.0+)

1 str = "*****this is **string** example....wow!!!*****"
2 print (str.strip( '*' ))  # 指定字符串 *

以上实例输出结果如下:

1 this is **string** example....wow!!!

从结果上看,可以注意到中间部分的字符并未删除。

以上下例演示了只要头尾包含有指定字符序列中的字符就删除:

实例(Python 3.0+)

1 str = "123abcrunoob321"
2 print (str.strip( '12' ))  # 字符序列为 12

以上实例输出结果如下:

1 3abcrunoob3

 

 

split():

split() 通过指定分隔符对字符串进行切片,如果第二个参数 num 有指定值,则分割为 num+1 个子字符串。

1 str = "this is string example....wow!!!"
2 print (str.split( ))       # 以空格为分隔符
3 print (str.split('i',1))   # 以 i 为分隔符
4 print (str.split('w'))     # 以 w 为分隔符

以上实例输出结果如下:

1 ['this', 'is', 'string', 'example....wow!!!']
2 ['th', 's is string example....wow!!!']
3 ['this is string example....', 'o', '!!!']

join():

Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。

1 s1 = "-"
2 s2 = ""
3 seq = ("r", "u", "n", "o", "o", "b") # 字符串序列
4 print (s1.join( seq ))
5 print (s2.join( seq ))

以上实例输出结果如下:

1 r-u-n-o-o-b
2 runoob

 

 四、二维数据的处理

二维数据存储为csv格式,需要将二维列表对象写入csv格式文件以及将csv格式读入成二维列表对象。

二维列表对象输出为csv格式文件方法如下(采用遍历循环和字符串的join()方法相结合)

#Is代表二维列表,此处省略
f=open('cpi.csv',"w")
for row in Is:#在Is的每一行里进行循环遍历
    f.write(','.join(row)+'\n')#在Is列表里的每一行末尾加上换行操作
f.close()

 二维数据的处理

f=open("cpi.csv","r")
Is=[]
for line in f:
    Is.append(line.strip("\n").split(","))
f.close()
print(Is)

.append()函数:

 append() 方法用于在列表末尾添加新的对象

list1 = ['Google', 'Runoob', 'Taobao']
list1.append('Baidu')
print ("更新后的列表 : ", list1)

结果:

更新后的列表 :  ['Google', 'Runoob', 'Taobao', 'Baidu']

 

标签:文件,格式化,python,列表,字符串,str,print,open
来源: https://www.cnblogs.com/ataraxiazzr/p/16495190.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有