vsyour 发表于 2018-4-4 17:36

帮小姐姐用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:08

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

sed,awk,shell比较简单就可以处理吧,如果一定要用python的话我觉得循环就可以解决了,写代码还是要看效率。用的python3.6,可能不需要考虑编码问题

这样应该可以满足需求了吧
老菜鸟还需要多多学习:lol

vsyour 发表于 2018-4-8 09:31

本帖最后由 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

storm 发表于 2018-4-4 17:46

刚开始学Python 感谢分享

萌神淼菥 发表于 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 版,分享下



cat redme.txt | tr -d "\r\n" | sed -E 's/(.{11})/\1\n/g' > new_redme.txt

dengwen168 发表于 2018-4-4 20:33

这个真的看不懂有什么用。

hjjsc 发表于 2018-4-5 07:35

楼主跑偏了,小姐姐要的是一行一字,你来个一行11字,word里的替换完全可以搞定,你给搞复杂了,你的事儿要玄!
页: [1] 2 3
查看完整版本: 帮小姐姐用python把文本文件按每行11个字排版