• 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)
    

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

  • 相关阅读:
    ZOJ-3230-Solving the Problems
    zoj-3410-Layton's Escape
    cin输入超过文本末尾
    sizeof('a')
    WPF TranslatePoint/TransformToVisual 总返回零
    Lock-free multi-threading
    c++0X 用字符串调用函数
    Vim 的c++语法补齐
    Reentrancy VS Thread safe
    内存屏障
  • 原文地址:https://www.cnblogs.com/yfc0818/p/11072620.html
Copyright © 2020-2023  润新知