吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6874|回复: 21
收起左侧

[Python 转载] 帮小姐姐用python把文本文件按每行11个字排版

[复制链接]
vsyour 发表于 2018-4-4 17:36
本帖最后由 vsyour 于 2018-4-8 09:51 编辑

360截图177707059299104.png

突然小姐姐说: "现在做数据都做的天天烦死".

需求大概如上图.
整理了一下,基本上就是这样的.
1.给一堆文本文档.
2.把这些文本转成每行11个字排版.

这个很基础.但是做起来还是需要考虑不少问题的.
这里分享下代码与大家一起交流下.
[Python] 纯文本查看 复制代码
#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')


执行效果:
ok.png

最后用exe打包了一下:
链接: https://pan.baidu.com/s/14O3gSKg4Help5Zp9rIE4Rg 密码: 5tim




感谢13楼的兄弟.
[Asm] 纯文本查看 复制代码
#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[j:(j + 11)] + '\n'
            b.append(i)
            j += 11
            if i == '\n':
                break
        # print(''.join(b).strip())
        outLine(fileName, ''.join(b).strip())
    os.system('pause')

免费评分

参与人数 10吾爱币 +9 热心值 +9 收起 理由
时空之外 + 1 + 1 谢谢@Thanks!
lushan63 + 1 用心讨论,共获提升!
lai2000 + 1 + 1 谢谢@Thanks!
qingfeng__ + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
chen180 + 1 + 1 用心讨论,共获提升!
kusoit + 1 + 1 用心讨论,共获提升!
15135171855 + 1 谢谢@Thanks!
iXi + 1 + 1 小姐姐,么么扎(*  ̄3)(ε ̄ *)
18835193530 + 1 + 1 我很赞同!
PikachuKing + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

huhus123 发表于 2018-4-5 15:08
本帖最后由 huhus123 于 2018-4-5 15:12 编辑

sed,awk,shell比较简单就可以处理吧,如果一定要用python的话我觉得循环就可以解决了,写代码还是要看效率。用的python3.6,可能不需要考虑编码问题
py1.png py2.png
这样应该可以满足需求了吧
老菜鸟还需要多多学习

免费评分

参与人数 3吾爱币 +4 热心值 +3 收起 理由
今日之日多烦忧 + 1 + 1 热心回复!
vsyour + 2 + 1 用心讨论,共获提升!
kusoit + 1 + 1 热心回复!

查看全部评分

 楼主| vsyour 发表于 2018-4-8 09:31
本帖最后由 vsyour 于 2018-4-8 09:35 编辑
huhus123 发表于 2018-4-5 15:08
sed,awk,shell比较简单就可以处理吧,如果一定要用python的话我觉得循环就可以解决了,写代码还是要看效率 ...

不错不错.这种列表切版的思路确实很好...

[Asm] 纯文本查看 复制代码
#coding:utf-8
text='''
1234567891234567891234567894123456789123456789123456789测测试中abc英英文a
'''
text=text.replace('\n','')
j=1
b=[]

while True:
    i=text[j:(j+11)]+'\n'
    b.append(i)
    j+=11
    if i== '\n':
        break
print(''.join(b).strip())

python001.png

shell 版本66666
[Asm] 纯文本查看 复制代码
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


shell001.png
storm 发表于 2018-4-4 17:46
头像被屏蔽
萌神淼菥 发表于 2018-4-4 18:01
提示: 作者被禁止或删除 内容自动屏蔽
numbersi 发表于 2018-4-4 19:20
可以的·~~学习
2876334724 发表于 2018-4-4 19:25
不会python  会C/c++/go
淡水千痕 发表于 2018-4-4 19:39
易语言路过。
丞相范睢 发表于 2018-4-4 19:47
学习学习!!!!!!!!!!!!!!
kusoit 发表于 2018-4-4 19:50
寫個bash 版,分享下

04_x_04_19-48-03.png

[Bash shell] 纯文本查看 复制代码
cat redme.txt | tr -d "\r\n" | sed -E 's/(.{11})/\1\n/g' > new_redme.txt

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
vsyour + 1 + 1 我很赞同!

查看全部评分

dengwen168 发表于 2018-4-4 20:33
这个真的看不懂有什么用。
hjjsc 发表于 2018-4-5 07:35 来自手机
楼主跑偏了,小姐姐要的是一行一字,你来个一行11字,word里的替换完全可以搞定,你给搞复杂了,你的事儿要玄!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 01:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表