簡體   English   中英

反轉 Python 中文本文件每行的最后 4 個字符 3

[英]Reverse the 4 last characters from each line of a text file in Python 3

我正在嘗試從行首的文本文件的每一行的每一端移動最后 4 個字符。

例如我有以下行:6c6d6e6f707172737475767778797a7b10050

我希望最后 4 位數字位於該行的前面,所以我有以下代碼來做到這一點:

import sys
import re
import os

def rearrange(word):
 if word.endswith('0'):         
     word = word[-4] + word[-3] + word[-2] + word[-1] + word[:-4]    
 print(word)
 return word

rearrange('6c6d6e6f707172737475767778797a7b10050')

我得到以下 output,因此到目前為止一切順利,它可以工作:

00506c6d6e6f707172737475767778797a7b1

但是,當我嘗試對帶有迭代循環的小文件執行此操作時。 假設要讀取的文本文件包含以下幾行:

6c6d6e6f707172737475767778797a7b10050
8d6d6e6f707172737475767778797a7b10020
9a6d6e6f707172737475767778797a7b10030

我想以同樣的方式工作,但我無法讓它工作。 有一些明顯的事情正在發生,我看不到它,有人可以發現它並在這里幫助我嗎?

import sys
import re
import os

def rearrange(word):
     if word.endswith('0'):         
         word = word[-4] + word[-3] + word[-2] + word[-1] + word[:-4]    
     print("print while the routine is executed:")
     print(word)
     return word     

file_write = open (r"reversed-test_text1.txt",'wt')

with open(r"test_text1.txt") as file_read:
    for line in file_read:        
        r = rearrange(str(line))
        file_write.write(r)
     
file_read.close()
file_write.close()

f = open("reversed-test_text1.txt", 'r')
print('Print the 4-char reversed text:')   
print(f.read())

當我執行它時,我得到以下不是我想要的:

Print the 4-char reversed text:
6c6d6e6f707172737475767778797a7b10050
8d6d6e6f707172737475767778797a7b10020
9a6d6e6f707172737475767778797a7b10030

有誰知道為什么? 它一定很簡單,但我看不到它(在 Python 中也沒有經歷過)。

我認為問題在於,通過從文件中讀取行,每行末尾都有一個\n 通過檢查rearrange方法中的零,您只是跳過了重新排列。

if word.endswith('0'):條件不滿足,因為每一行都以換行符( '\n' )結尾。

要使其按預期工作,您可以按如下方式重寫循環:

with open(r"test_text1.txt") as file_read:
    for line in file_read:        
        r = rearrange(line.rstrip())
        file_write.write(r + os.linesep)

.rstrip()方法從字符串末尾修剪空白字符。

os.linesep是當前平台的默認行分隔符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM