Python笔记六、文件和数据格式化

一、 文件的操作

fname = input("请输入要打开的文件:")
fo = open(fname,"r")
print(fo.readlines())
for line in fo.readlines():
    print(line)
fo.close()

 1.当php.txt编码为ANSI,正常打开。

2.当要打开的文件编码为UTF-8时,打开时可能会报错,将第29行改为

fo = open(fname,"r",encoding='utf-8')

3.打开方式默认为文本文件模式“t”,windows文本文件以“\r\n”(即回车换行,0D0A,CRLF,acsii值分别为13,10)作为行结束符,而linux等系统文本文件以"\n"为行结束符。

经测试,windows环境中,python的文件读取函数readline()读取到的每行将多出"\n"字符,print()显示后将多出一个空行。

 4.执行第30行readlines()函数后,文件操作指针移至文件结尾,所以第31行的readline()返回为空

增加如图第31行代码,将文件操作指针移至文件行首

 5.如果使用"a+"追加模式,执行fo.readlines()后,原文件的内容将追加改写!且fo变量将同时变化!之后调用fo变量时需注意这一点

二.数据格式化和处理

1.常用的存储和传输格式:CSV、XML、HTML、JSON

CSV:

城市,环比,同比,定基
北京,101.5,120.7,121.4
上海,101.2,127.3,127.8
广州,101.2,119.4,120
深圳,102,140,145.5
沈阳,100.1,101.4,101.6

XML:

<?xml version="1.0" encoding="UTF-8"?>
<本书作者>
  <姓氏>嵩</姓氏><名字>天</名字><单位>北京理工大学</单位>
  <姓氏>礼</姓氏><名字>欣</名字><单位>北京理工大学</单位>
  <姓氏>黄</姓氏><名字>天羽</名字><单位>北京理工大学</单位>
</本书作者>

HTML:

<!DOCTMPE HTML>
<html>
<body>
<meta charset=gb2312>
<h2 align=center>2016年7月部分大中城市新建住宅价格指数</h2>
<table border='1' align="center" width="70%">
<tr bgcolor='orange'>

<th width="25%">城市</th><th width="25%">环比</th><th width="25%">同比</th><th width="25%">定基</th></tr>
<tr><td align="center">北京</td><td align="center">        101.5</td><td align="center">120.7</td><td align="center">        121.4</td></tr>
<tr><td align="center">上海</td><td align="center">        101.2</td><td align="center">127.3</td><td align="center">        127.8</td></tr>
<tr><td align="center">广州</td><td align="center">        101.2</td><td align="center">119.4</td><td align="center">        120</td></tr>
<tr><td align="center">深圳</td><td align="center">        102</td><td align="center">140</td><td align="center">        145.5</td></tr>
<tr><td align="center">沈阳</td><td align="center">        100.1</td><td align="center">101.4</td><td align="center">        101.6</td></tr>
</table>
</body>
</html>

JSON:

[
    {
        "同比": "120.7",
        "城市": "北京",
        "定基": "121.4",
        "环比": "101.5"
    },
    {
        "同比": "127.3",
        "城市": "上海",
        "定基": "127.8",
        "环比": "101.2"
    },
    {
        "同比": "119.4",
        "城市": "广州",
        "定基": "120",
        "环比": "101.2"
    },
    {
        "同比": "140",
        "城市": "深圳",
        "定基": "145.5",
        "环比": "102"
    },
    {
        "同比": "101.4",
        "城市": "沈阳",
        "定基": "101.6",
        "环比": "100.1"
    }
]

 2.数据格式之间的转换

 CSV格式的HTML展示:

# CSV格式的HTML展示
seg1 ='''
<!DOCTMPE HTML>\n<html>\n<body>\n<meta charset=gb2312>
<h2 align=center>2016年7月部分大中城市新建住宅价格指数</h2>
<table border='1' align="center" width="70%">
<tr bgcolor='orange'>\n
'''
seg2 = "</tr>\n"
seg3 = "</table>\n</body>\n</html>"
def fill_data(locls):
    seg = '<tr><td align="center">{}</td><td align="center">\
        {}</td><td align="center">{}</td><td align="center">\
        {}</td></tr>'.format(*locls)
    return seg
fr = open("data.csv","r",encoding='utf-8')
ls = []
for line in fr:
    line = line.replace("\n","")
    ls.append(line.split(","))
print(ls)
fr.close()
fw = open("dataHTML.html","w")
fw.write(seg1)
fw.write('<th width="25%">{}</th><th width="25%">{}</th><th width="25%">{}</th><th width="25%">{}</th>'.format(*ls[0]))
fw.write(seg2)
for i in range(len(ls)-1):
    fw.write(fill_data(ls[i+1])+"\n")
fw.write(seg3)
fw.close()        

CSV转JSON

# CSV和JSON格式相互转换
import encodings
import json
from tkinter import W
fo = open("data.csv","r",encoding = 'utf-8')
ls = []
for line in fo:
    line = line.replace("\n","")
    ls.append(line.split(","))
print(ls)
fo.close()
fx = open("datajson.json","w",encoding = 'utf-8')
for i in range(1,len(ls)):
    ls[i] = dict(zip(ls[0],ls[i]))
    #print(ls)
json.dump(ls[1:],fx,sort_keys=True,indent=4,ensure_ascii=False)
fx.close()

JSON转CSV

fx = open("datajson.json","r",encoding = 'utf-8')
ls = json.load(fx)
data = [list(ls[0].keys())]
for item in ls:
    data.append(list(item.values()))
fx.close()
fw = open("dataJSON.csv","w",encoding='utf-8')
for item in data:
    fw.write(",".join(item)+"\n")
fw.close()

 

 三.数据序列和反序列化

序列化:是将对象的状态信息转换为可以存储或传输的形式的过程,传输格式一般为JSO和XML

反序列化:指从存储区域将JSON或XML格式读出,并重建对象的过程

序列化函数:json.dumps(obj,sort_keys=False,indent=None),将Python格式转换为JSON格式的字符串,编码过程

反序列化函数:json.loads(string),将JSON格式字符串转换为Python的数据类型,解码过程

zip()是一个内置函数,能够将两个长度相同的列表组合成一个关系对

x = [1,2,3]
y = ["a","b","c"]
print(list(zip(x,y)))
print(dict(zip(x,y)))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值