Python中按指定長度分割字符串並反轉

對話開始

 Hanmeimei:(聊天工具彈出消息)哥,我有需求,你可以滿足我嗎?

 Tony:這麼晚了,你是要幹啥?

 Hanmeimei:就是因為晚我才着急啊

 Tony:(對這剛入職新員工早有好感的Tony心中竊喜,想套個話)你為啥只找我啊

 Hanmeimei:他們說你最厲害,能力最強。而且我們這邊同事都走光了就剩下我一人

 Tony:(合作兄弟下班就是早啊)這個不敢當。。能力湊合吧,那咱就搞唄

 Hanmeimei:謝謝哥。就是我有一個文件,文件內容格式每行都是一行不超過16位的數字,實現要求就是如果不超過16位的就以F補充到末尾湊齊16位,然後每行以2位分割並反轉。比如188123456789723 反轉後要求是 81183254769827F3 。就是這樣子。

Tony:(妹的,原來是讓我幹活,果然是能力越大,下班越晚)懂了。十分鐘後給你。

需求

   文件名為tel.txt,內容格式每行都是一行不超過16位的數字,實現要求就是如果不超過16位的就以F補充到末尾湊齊16位,然後每行以2位分割並反轉。比如188123456789723 反轉後要求是 81183254769827F3 。就是這樣子

實現邏輯

  1、讀取tel.txt文件內容,保存到文件列表。文件內容如下:

  2、每行字符串不超過16位的,以F填充。

  3、數字以2位分割,2位反轉後再全部拼接。(關鍵步驟,寫成函數,以後可以復用)

  4、保存到新文件。

代碼如下:

# -*- coding: utf-8 -*-

"""
@funtion: 反轉指定字符串
@author: lion
@version: V1.0.0
@create_date:2020-08-31
@tool:python3.7
@modify_dte:
"""

import re

def split_str(string,length):
    """
    按照指定長度分割輸入字符串,並以列表形式返回
    :param string: 待分割字符串
    :param length: 指定分割長度
    :return: 分割後的字符串列表
    """
    str_lst = re.findall(r'.{'+str(length)+ '}',string)
    str_lst.append(string[(len(str_lst) * length):])
    return str_lst

def reverse_lst(string_lst):
    """
    將列表中的字符串反轉
    :param string_lst: 字符串列表
    :return: 反轉後的字符串列表
    """
    reverse_str_lst = []
    for each in string_lst:
        reverse_str_lst.append(each[::-1])
    return reverse_str_lst


if __name__ == '__main__':
    """主程序"""
    # 指定分割長度
    SPLIT_LEN = 2
    # 指定要求字符串字符串長度,長度不足要求以F末尾填充
    FIX_STRLEN = 16
    # 獲取文件內容,以列表形式保存。文件內容格式為每行為188123456789723格式字符串
    fr = open('tel.txt', 'r')
    record_lst = fr.readlines()
    fr.close()

    reverse_record = ''
    reverse_record_lst = []
    for each_line in record_lst:
        each_line = each_line.strip()
        len_telno = len(each_line)
        if len_telno < FIX_STRLEN:
            each_line = each_line + (FIX_STRLEN - len_telno) * 'F'
        reverse_record = ''.join(reverse_lst(split_str(each_line, SPLIT_LEN)))
        reverse_record_lst.append(reverse_record + '\n')

    fw = open('reverse_record.txt', 'w')
    fw.writelines(reverse_record_lst)
    fw.close()

    print("End Script!")

 運行結果如下:

Tony:(不到十分鐘,把轉換後的文件扔了過去)給你弄好了,你檢查一下

Hanmeimei:好的,Tony哥,你這也太快了吧。。

Tony:擦。。不要用快來誇我

Hanmeimei:好的,哥,你真厲害。

Tony:(擦。。居然秒懂,看着這踏實好學的新員工妹子,Tony語重心長的開始傳授職場寶貴經驗)你這剛進公司,要花點時間把編程學好,姿勢越多,賺錢就快。姿勢就是財富。。一頓猛敲職場提煉精華就發過去了

Tony:半小時過去了,妹子沒回復,一看頭像已經變灰下班了。。 再猛的一看,挖槽,不是知識嗎?咋成姿勢了,趕緊發消息辯解一通。hanmeizi,Tony我是南方人發音不好,是知識寫錯了。

 Tony一看錶十一點了,又是911的一天,猛撮了一口保溫杯里的紅棗枸杞水,收拾東西趕班車去了,內心去思考以後如何讓合作在岸辦公,畢竟長期見不到好感的hanmeimei也不是回事啊

 

Tags: