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. 對這一行去掉非單詞之間的空格,並將\t轉化為空格,然后將每一個修改后的行元素添加到列表
  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 == "\t":
                if flag == False:
                    if i == " ":
                        a.append(i)
                        flag = True
                    if i == "\t":
                        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]+"\n")
        a = []
    print(str_lens)

我的操縱邏輯很復雜,而且這個肯定不是最好的做法,昨天寫這道題的時候自己也寫了半小時多,反思一下怎么連水題都做的這么慢了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM