帮小姐姐用python把文本文件按每行11个字排版
本帖最后由 vsyour 于 2018-4-8 09:51 编辑突然小姐姐说: "现在做数据都做的天天烦死".
需求大概如上图.
整理了一下,基本上就是这样的.
1.给一堆文本文档.
2.把这些文本转成每行11个字排版.
这个很基础.但是做起来还是需要考虑不少问题的.
这里分享下代码与大家一起交流下.
#coding:utf-8
import os
def getTxtFileName(dir="."):
items = os.listdir(dir)
newlist = []
for names in items:
if names == 'redme.txt' or 'new_' in names:
continue
if names.endswith(".txt"):
newlist.append(names)
return newlist
def openFile(fileName):
with open(fileName,'r') as f:
txtLines = []
for i in f:
txtLines.append(i.strip('\n'))
# i+=i
return ''.join(txtLines)
def outLine(fileName,line):
with open('new_'+fileName,'a+') as f:
f.write(line+'\n')
if __name__ == '__main__':
dir='./'
for fileName in getTxtFileName(dir):
a=0
oneKeyOk=[]
if os.path.exists('new_' + fileName):
# 如果文件已经存在则直接跳过
print('[+]','new_' + fileName+'已经存在,本次不处理!')
continue
print('[+] 开始处理',fileName)
for oneKey in openFile(fileName):
# 去掉了换行的单个字
a +=1
if a <= 11 :
oneKeyOk.append(oneKey)
else:
# print(''.join(oneKeyOk))
outLine(fileName,''.join(oneKeyOk))
oneKeyOk = []
a = 0
if len(oneKeyOk) != 0:
outLine(fileName, ''.join(oneKeyOk))
os.system('pause')
执行效果:
最后用exe打包了一下:
链接: https://pan.baidu.com/s/14O3gSKg4Help5Zp9rIE4Rg 密码: 5tim
感谢13楼的兄弟.
#coding:utf-8
import os
def getTxtFileName(dir="."):
items = os.listdir(dir)
newlist = []
for names in items:
if names == 'redme.txt' or 'new_' in names:
continue
if names.endswith(".txt"):
newlist.append(names)
return newlist
def openFile(fileName):
with open(fileName,'r') as f:
txtLines = []
for i in f:
txtLines.append(i.replace('\n',''))
# i+=i
return ''.join(txtLines)
def outLine(fileName,line):
with open('new_'+fileName,'a+') as f:
f.write(line)
if __name__ == '__main__':
dir='./'
for fileName in getTxtFileName(dir):
a=0
oneKeyOk=[]
if os.path.exists('new_' + fileName):
# 如果文件已经存在则直接跳过
print('[+]','new_' + fileName+'已经存在,本次不处理!')
continue
print('[+] 开始处理',fileName)
j = 1
b = []
text=openFile(fileName)
while True:
i = text + '\n'
b.append(i)
j += 11
if i == '\n':
break
# print(''.join(b).strip())
outLine(fileName, ''.join(b).strip())
os.system('pause')
本帖最后由 huhus123 于 2018-4-5 15:12 编辑
sed,awk,shell比较简单就可以处理吧,如果一定要用python的话我觉得循环就可以解决了,写代码还是要看效率。用的python3.6,可能不需要考虑编码问题
这样应该可以满足需求了吧
老菜鸟还需要多多学习:lol 本帖最后由 vsyour 于 2018-4-8 09:35 编辑
huhus123 发表于 2018-4-5 15:08
sed,awk,shell比较简单就可以处理吧,如果一定要用python的话我觉得循环就可以解决了,写代码还是要看效率 ...
不错不错.这种列表切版的思路确实很好...{:1_921:}
#coding:utf-8
text='''
1234567891234567891234567894123456789123456789123456789测测试中abc英英文a
'''
text=text.replace('\n','')
j=1
b=[]
while True:
i=text+'\n'
b.append(i)
j+=11
if i== '\n':
break
print(''.join(b).strip())
{:1_921:} shell 版本66666
for i in `ls *.txt`;do cat $i |tr -d "\r\n" | sed -e '$a\' | sed -E 's/(.{11})/\1\n/g' > new_$i;done
刚开始学Python 感谢分享 可以的·~~学习 不会python会C/c++/go
易语言路过。 学习学习!!!!!!!!!!!!!! 寫個bash 版,分享下
cat redme.txt | tr -d "\r\n" | sed -E 's/(.{11})/\1\n/g' > new_redme.txt 这个真的看不懂有什么用。 楼主跑偏了,小姐姐要的是一行一字,你来个一行11字,word里的替换完全可以搞定,你给搞复杂了,你的事儿要玄!