json:
 
json异于pickle,无乱码,各语言都支持,但Python各对象只直接接收int,str,(),[],{}。读入txt时只接受str,int变为str(int),()[]{}被json.dumps(*)换装为str后才行;反义词json.loads(json风格的str)返回()[]{}。
 
json虽是str类型,却有其独特风格,即引号只用双引号:因为有的编程语言如VBA并没用'而只用",故而通行各门语言的json也只用双引号。
 
import json
 
html1="{'a':1,'b':2,'中':3,'外':'国'}"
print(json.loads(html1))  #×
html2='{"a":1,"b":2,"中":3,"外":"国"}'
print(json.loads(html2))
******分割线******
import json
 
pythonType={'a':1,'b':2,'中':3,'外':'国'}
strStyle=str(pythonType)
print(type(strStyle),strStyle)  #无意义的单引号str:{'a': 1, 'b': 2, '中': 3, '外': '国'}
 
#中文不要转为u节码,各键值对换行显示,去除空格分隔符
jsonStyle=json.dumps(pythonType,ensure_ascii=False,indent='').replace(": ",":")
print(type(jsonStyle),jsonStyle)  #双引号str:{"a":1,"b":2,"中":3,"外":"国"}
 
with open('E:/temp.txt','a+',encoding='utf8') as f:  #写入或读取txt
    f.write(jsonStyle)  #非str类型如()[]{},转为json风格的str后才能写入txt;int则str(int)
    f.seek(0)   #.write(*)或.read()后,指针移到了文件尾,回到开头以正常使用该文件
    txt=f.read()
    print(type(txt),txt)
    pythonType=json.loads(txt)
    print(type(pythonType),pythonType)
**********************分割线**********************
key没套""的json字串:
 
import execjs
 
jsonStyle='{a:"111",b:22,c:3}'
pythonType=execjs.eval(jsonStyle)
**********************分割线**********************
让类对象貌似也能被json读入读出:
 
import json
 
class Student:
    def __init__(self,name,age,score):
        self.name=name
        self.age=age
        self.score=score
    def test(self):
        print(self.name,'good morning~')
 
s=Student('Bob',20,88)
# s.favorite='Python' #实例的私有属性可装入文件,但读回时无法和类挂钩,故不用
 
f=open('早上好.txt','r+')
json.dump(s.__dict__,f) #装入实例s的属性——1个字典到文件
# json.dump(s,f,default=lambda instance:instance.__dict__)    #改装实例s为json能接收的{}
f.seek(0)   #dump()和read()一样,用过之后指针都到了文末
w=json.load(f,object_hook=lambda d:Student(**d))    #文件内容做lambda的实参,返回新实例
f.close()
 
print(w.__dict__)
w.test()
****************************************分割线****************************************
csv:
 
Egのutf8编码的字串写入csv文件,并能用Excel正常打开:
 
import codecs,csv
with open('test.csv','ab') as f:
    f.write(codecs.BOM_UTF8)
with open('test.csv','a',encoding='utf8') as f:
    wr=csv.writer(f)
    wr.writerow(['影片名','评分','概况','年份','类别'])
**********************分割线**********************
Egの读取csv文件的俩常用库——csv和pandas:
 
import csv,pandas as pd,requests
from io import StringIO
 
df=csv.DictReader(open('E:/students.csv'))  #文件;若with … as f,则用f.readlines()
for row in df:  #row是collections.OrderedDict对象
    print(df.fieldnames,row['姓名'],row.keys(),row.values(),sep='\n')
    break
 
df=pd.read_csv('E:/students.csv',encoding='gbk')    #文件路径字串,无需open
for row in df.iterrows():   #row是元组:(序号,pandas.Series对象)
    print(row[1][0],row[1]['姓名'],row[1].index,row[1].values,sep='\n')
    break
 
url='http://pythonscraping.com/files/MontyPythonAlbums.csv'  #不下载直接读自网络
file=StringIO(requests.get(url).text)
df=csv.reader(file)
headers=next(df)
for row in df:
    print(row)
****************************************分割线****************************************
txt:
open打开文件的几种mode:
文件无则报错:r读,r+读后再f.seek(0)可覆盖写;
文件无则新建:a+末尾写并在f.seek(0)后可读,a末尾写;w清空写,w+清空写后再f.seek(0)可读。
 
a*或w*模式所新建的文本,纯英文编码会坚持utf8,写入有中文才能让指定的gbk生效。
 
相较直接open,变身为【with open(filepath) as f】的优点:with可自动open和close文件;而且把文件对象f当做迭代对象,将自动处理IO缓冲和内存管理,无需担心几个G的大文件的处理。
**********************分割线**********************

Egの各txt的编码不详,统一转换为gbk:

若特殊字符出没于ANSI而非utf8文件,则utf8和gbk都不能解码,只能抛弃这1行。
 
import pandas as pd,os
from tkinter.filedialog import askopenfilenames as ofn
from gevent import monkey;monkey.patch_all()
from gevent.pool import Pool
 
#法1のpandas读写一条龙:不过utf8和gbk都不能解码的那些行,只能换用法2弃之
def changeCoding1(coding,file):
    newfile=file[::-1].replace('.','.)wen(',1)[::-1]
    with open(file) as f:   #未.read()的open对象,可让pandas间接支持中文路径
        try:
            df=pd.read_table(f,skip_blank_lines=False,encoding='utf8')
        except:
            f.seek(0)    #pd.read_table(f),相当于f用指定或默认编码作.read()
            df=pd.read_table(f,skip_blank_lines=False,encoding='gbk')
    df.to_csv(newfile,index=False,encoding=coding)
 
#法2の边读边写:open1读为二进制+逗号语法+逐行解码并去干扰后给open2抄写
def changeCoding2(coding,file):
    newfile=file[::-1].replace('.','.)wen(',1)[::-1]
    with open(file,'rb') as r,open(newfile,'w',encoding=coding) as w:
        for index,line in enumerate(r):  #各行及\n的list,用[i]则补全.readlines()
            try:w.write(line.decode('utf8').rstrip()+'\n')  #*b模式打开,行尾会多个\r\r
            except:
                try:w.write(line.decode('gbk').rstrip()+'\n')
                except:print(f'{file}的第{index+1}行解码失败')
 
def main(func):
    coding='gbk'
    files=ofn(initialdir=os.path.dirname(__file__),title='请选择要转换编码的各文本')
    p=Pool(size=4)
    [p.spawn(func,coding,file) for file in files]
    p.join()
 
if __name__ == '__main__':
    main(changeCoding2)
**********************分割线**********************
Egの遍历目录下的文本或excel,把证件的8位生日、手机的4位城市,都改为*:
 
import os,re,pandas as pd
 
def handleText(file):
    try:
        f=open(file,'r+')
        text=f.read()
    except:
        f=open(file,'r+',encoding='utf8')
        text=f.read()
    text=re.sub('(\d{6})\d{8}',r'\1'+'*'*8,text)
    text=re.sub('(\d{3})\d{4}',r'\1'+'*'*4,text)
    f.seek(0)
    f.write(text)
    f.close()
 
def handleExcel(file):
    df=pd.read_excel(open(file,'rb'),skip_blank_lines=False)
    df.replace('(\d{6})\d{8}',r'\1'+'*'*8,inplace=True,regex=True)
    df.replace('(\d{3})\d{4}',r'\1'+'*'*4,regex=True).to_excel(file,index=False)
 
def main(folderPath):
    allfiles=[]
    for folder,useless,files in os.walk(folderPath):
        allfiles.extend([os.path.join(folder,file) for file in files])
    for file in allfiles:
        suffix=os.path.splitext(file)[-1][1:]
        if suffix in ['txt','csv','py','md']:
            handleText(file)
        elif suffix in ['xls','xlsx']:
            handleExcel(file)
 
if __name__ == '__main__':
    folderPath='D:\待遍历文件夹'
    main(folderPath)
****************************************分割线****************************************
xlsx:
 
Egの新建及打开xlsx文件:
 
from openpyxl import Workbook   #新建工作簿
wb = Workbook()
ws = wb.active
ws.title='豆'
ws.append(['书名', '评分', '作者', '网址'])
ws.append(['龙符', '9.9', '梦入神机', 'http://book.zongheng.com/book/523438.html'])
wb.save('E:\豆瓣.xlsx')
 
from openpyxl import load_workbook  #打开已存在的工作簿
from openpyxl.styles import Font
wb=load_workbook('E:\豆瓣.xlsx')
ws=wb.worksheets[0]  #获取第1张表;②通过表名获取:wb['豆']
print(ws.max_row)
ws['A1'].font=Font(name='微软雅黑', size=12)    #ws['A1'].number_format='@' 
wb.save('E:\豆瓣.xlsx')

json、txt、xlsx的更多相关文章

  1. Java 将Word转为PDF、PNG、SVG、RTF、XPS、TXT、XML

    同一文档在不同的编译或阅读环境中,需要使用特定的文档格式来打开,通常需要通过转换文档格式的方式来实现.下面将介绍在Java程序中如何来转换Word文档为其他几种常见文档格式,如PDF.图片png.sv ...

  2. 浏览器在线预览pdf、txt、office文件

    //使用文件预览的原因是:TMD微信浏览器屏蔽掉文件下载链接,只好折中使用文件在线预览功能//要点:1.office文件用微软的插件打开 http://view.officeapps.live.com ...

  3. DNS域名解析中A、AAAA、CNAME、MX、NS、TXT、SRV、SOA、PTR各项记录的作用

    名注册完成后首先需要做域名解析,域名解析就是把域名指向网站所在服务器的IP,让人们通过注册的域名可以访问到网站.IP地址是网络上标识服务器的数字地址,为了方便记忆,使用域名来代替IP地址.域名解析就是 ...

  4. 从excel、txt、dict中取data,预期值

    一:从excel中取data excel中放入预期值,上报data数据 excel中第一行是data数据,第二行是预期值 在每个class中,取data数据上报到接口中,具体代码如下: def get ...

  5. .net中将DataTable导出到word、Excel、txt、htm的方法

    dt:DataTable strFile:fileName strExt:type private void GridExport(DataTable dt, string strFile, stri ...

  6. ASP.NET MVC在线预览Excel、Word、TXT、PDF文件

    代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using Syste ...

  7. xml、txt、config的一些基本用法

    先来测试一下xml的读取好了创建了一个student.xml的文件 <?xml version="1.0" encoding="UTF-8"?> & ...

  8. iOS 打电话、发短信、邮件、打开网址、调用应用等合集

    iOS中的很多功能都是非常简单的,几行代码就搞定了,比如打电话.打开网址.发邮件.发短信等,这里总结几个比较常用的: 1.打电话 方式一:最简单最直接的方式:直接跳到拨号界面 NSURL *url = ...

  9. FastDFS:Java客户都实现文件的上传、下载、修改、删除

    客户端版本:fastdfs_client_v1.24.jar 配置文件 connect_timeout = 200 network_timeout = 3000 charset = UTF-8 htt ...

随机推荐

  1. 解决Tomcat启动时项目重复加载问题

    前几天一个同学项目要上线,部署到服务器时,因为客户需要通过IP直接可以访问到,所以在server.xml做了如下的配置 导致启动tomcat时候出现一个项目重复加载了两次,很容易就出现了内存溢出. 这 ...

  2. H5兼容ie做法

    IE浏览器支持新的标签:可以在使用新标签之前用javascript创建一个虚假的标签,这样就可以识别了.如<article>标签,在使用前,创建一个虚假的<article>标签 ...

  3. Linux实操篇 vi和vim编辑器

    vi和vim的基本介绍 所有的Linux系统都会内建vi文本编辑器. vim具有程序编辑的能力,可以看做是vi的增强版本,可以主动的以字体颜色辨别语法的正确性,方便程序设计.代码补完.编译及错误跳转等 ...

  4. Android单元测试学习(一)

    什么是单元测试 首先总结一下什么是单元测试,单元测试中的单元在Android或Java中可以理解为某个类中的某一个方法,因此单元测试就是针对Android或Java中某个类中的某一个方法中的逻辑代码进 ...

  5. 用java语言构建一个网络服务器,实现客户端和服务器之间通信,实现客户端拥有独立线程,互不干扰

    服务器: 1.与客户端的交流手段多是I/O流的方式 2.对接的方式是Socket套接字,套接字通过IP地址和端口号来建立连接 3.(曾经十分影响理解的点)服务器发出的输出流的所有信息都会成为客户端的输 ...

  6. python 的包的导入

    已经写过一篇包的导入了,最近又遇到了点问题,所以想把这些再搞的明白点就又试了试 代码结构如下 在test目录下,有Admin包,home包,在home下有它的子包foo 各个文件代码如下 admins ...

  7. inline、block与inline-block

    参考了一些资料集其他人的博客,梳理一下inline.block与inline-block三个概念.     高度 宽度 举例 block 在新行上开始 高度,行高以及顶和底边距都可控制 宽度缺省是它的 ...

  8. Linux命令行报错 bash: cannot create temp file for here-document: No space left on device

    今天Linux服务器出问题了,使用"tab"补全命令时,提示 bash: cannot create temp file for here-document: No space l ...

  9. Match-----Correlation-----find_ncc_model_exposure

    * This example program shows how to use HALCON's correlation-based* matching. In particular it demon ...

  10. 获取当前页面url

    function getCurrUrl() { var url = ""; if (parent !== window) { try { url = window.top.loca ...