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. Spring 中 Bean 的生命周期

    所谓 Bean 的生命周期,就是一个 Bean 从创建到销毁,所经历的各种方法调用.大致包含下面几个方法(不是全部) Bean 的实例化,调用了构造方法. 使用 setter 方法填充属性. 一旦依赖 ...

  2. SpringBoot 出现Whitelabel Error Page 解决办法

    这是咋了,咋的就404了 我路径也挺对的啊 注解也都写上了啊 咋就找不到了呢? debug吧它不进方法 看日志吧,他还不报错 这家伙给我急的 百度一下午也没解决,最后还是看官网才知道错在了那里,程序只 ...

  3. springboot中配置文件application.properties的配置详情,数据源配置

    pring Boot使用了一个全局的配置文件application.properties,放在src/main/resources目录下或者类路径的/config下.Sping Boot的全局配置文件 ...

  4. js方法用来获取路径传参上所带的参数

    //js方法用来获取路径传参上所带的参数 function GetQueryString(param) { var reg = new RegExp("(^|&)" + p ...

  5. Hadoop 学习之Docker

    docker环境的配置请参考:http://www.cnblogs.com/frankliu/p/8052673.html hadoop-docker安装地址参考:https://hub.docker ...

  6. ELK6.0部署:Elasticsearch+Logstash+Kibana搭建分布式日志平台

    一.前言 1.ELK简介 ELK是Elasticsearch+Logstash+Kibana的简称 ElasticSearch是一个基于Lucene的分布式全文搜索引擎,提供 RESTful API进 ...

  7. 在IDEA中停止和关闭SonarLint自动检查,手动运行SonarLint检查代码

    关闭SonarLint自动检查代码 有时敲一行代码SonarLint插件就会自动检查,让人感觉很不舒服,还会使电脑卡顿: 依次点击:File -> Settings 或直接Ctrl+Alt+S ...

  8. chrome.debugger

    官网: https://chromedevtools.github.io/devtools-protocol/ https://developer.chrome.com/extensions/debu ...

  9. mysql_day01

    1.MySQL概述 1.什么是数据库 数据库是一个存储数据的仓库 2.都有哪些公司在用数据库 金融机构.游戏网站.购物网站.论坛网站 ... ... 3.提供数据库服务的软件 1.软件分类 MySQL ...

  10. trap实现跳板机

    第一节 跳板机实现原理(图例) 第2节 涉及到的知识点 命令:trap 拓展知识:进程与信号 trap 语法,作用,使用 [jeson@mage-jump-01 ~/]$  trap -l  1) S ...