20190715 Python学习随录

学习随录系列


功能:实现对一个由若干行组成、每行均为[0.xxx, 0.xxx, …]格式的json文件的裁剪

README

  1. 在同一目录下新建一个input.txt,其中存放需要转换的文件名。

    !仅文件名,无后缀名,无路径

  2. 在该目录下放置同名的json文件

  3. 在该目录启动cmd,运行该py文件

  4. 本代码只注重效率,未考虑文件读取失败的问题,故请确保有合法输入文件

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import sys
import io

numbers = [2,3,5] #只保留numbers[i]的整数倍行
with open('input.txt', 'rb') as input_file: #读取文件名

files = input_file.read().decode('utf-8').split('\r') #读取.解码.分割

for filename in files: #遍历

if filename == '\n' or filename == '\r':
break #防止空行异常跳出
if filename[0] == '\n':
filename = filename[1:] #防止前导换行符
if filename[len(filename)-1] == '\n':
filename = filename[:len(filename)-1] #防止后置换行符

infile = filename + '.' + 'json' #构造输入文件名

for n in numbers: #遍历切割依据

outfile = filename + '-' + str(n) + '.' + 'json' #构造输出文件名

with open(infile, 'rb') as fr: #打开输入文件
file_str = fr.read().decode('utf-8').split('[') #读取.解码.分割

with open(outfile, 'wb') as fw: #打开输出文件
ans = file_str[0] + '[' #预置
i = n + 1 #取数

while i < len(file_str): #取所需行
ans += '[' + file_str[i] #构造输出文件
i += n

if ans[len(ans)-1] != '}': #防止异常结束
i = len(ans) - 1
while ans[i] != ',':
i -= 1
ans = ans[:i] + ']}'

fw.write(ans.encode('utf-8')) #写文件

--It's the end.Thanks for your read.--