python字符串问题—文件排版

问题描述

【问题描述】
英文电影中参演人员名单一般以某种方式进行排版显示。给定一个未排版的文件listin.txt,该文件中每行参演人员名单由冒号':'分隔成前后两部分,但格式杂乱无章,单词(由除空格和水平制表符之外的其它字符构成)之间可能有多个空格或水平制表符分隔。编写程序,要求将其按如下排版规则排版输出到另一个文件listout.txt中:

1.从标准输入(即键盘)读取一整数,作为排版后所有各行冒号':'在一行中的固定位置;假设输入的整数肯定大于排版后所有各行冒号':'前的字符个数,位置从1开始计数;

2.冒号':'左边的单词串以行头为基准左对齐,左边的最后一个单词与冒号之间以空格填充;冒号':'右边的单词串以冒号':'为基准左对齐,最后一个单词后只有回车换行符,不再有其它字符;

3.冒号':'左右两边的单词间都只有一个空格分隔,并且要求冒号两边至少各有一个空格。

假设输入文件中每行字符个数不超过100。

【输入形式】
 
待排版的参演人员名单从当前目录下的listin.txt文件中读入;表示冒号':'位置的整数从标准输入读入。

【输出形式】
排版后的参演人员名单输出到当前目录下的listout.txt中

【输入样例】
假设文件listin.txt内容为:

   Digital Intermediate by :   EFILM 

Supervising    Digital Colorist : STEVEN J. SCOTT  

 Second Colorist :ANDREW FRANCIS

 Digital Intermediate Producer:LOAN PHAN

Digital  Intermediate Editor:  DEVON MILLER     


表示冒号固定位置的整数为:
40

整一个题目的逻辑就是读取文件中的每一行,然后提取其中的两个单词,最后将他们格式化输出。
分成流程就是

  1. 按行读取文件
  2. 对这一行去掉非单词之间的空格,并将 转化为空格,然后将每一个修改后的行元素添加到列表
  3. 对这个列表进行拼接成字符串
  4. 将字符串按照:分割
  5. 对分割后的每一部分去掉首尾的空格
  6. 最后按照输入的格式进行输出
#### 就是这道坑爹的题目嗷嗷嗷嗷嗷嗷
with open("listout.txt","w") as f:
    f.write("")
loca = int(input())
with open(r"listin.txt", "r") as f:
    data = f.readlines()
    a = []
    str_lens = []
    for line in data:
        # print(list(line))
        flag = False
        for i in line:
            if i == " " or i == "	":
                if flag == False:
                    if i == " ":
                        a.append(i)
                        flag = True
                    if i == "	":
                        a.append(" ")
                        flag = True
                else:
                    continue
            else:
                flag = False
                a.append(i)
        # print(a)
        cache_str = "".join(a)
        # print(cache_str)
        cache_list = cache_str.split(":")
        print(cache_list)
        for i in range(len(cache_list)):
            cache_list[i] = cache_list[i].strip()
        str_lens.append(len(cache_list[0]))
        # print(len(cache_list))
        with open("listout.txt","a") as q:
            q.write(cache_list[0]+" "*(loca-len(cache_list[0])-1)+": "+cache_list[1]+"
")
        a = []
    print(str_lens)

我的操纵逻辑很复杂,而且这个肯定不是最好的做法,昨天写这道题的时候自己也写了半小时多,反思一下怎么连水题都做的这么慢了。

原文地址:https://www.cnblogs.com/yfc0818/p/11072620.html