最權威的做網(wǎng)站設計公司價格搜索引擎營銷ppt
提取多個txt數(shù)據(jù)并合成excel——例子:與中國建交的國家
- 一、概要
- 二、整體架構(gòu)流程
- 三、完整代碼
一、概要
??這段代碼主要執(zhí)行以下任務:
??1. 定義輔助函數(shù):首先,定義了兩個輔助函數(shù)。has_chinese_chars
函數(shù)用于檢查給定的字符串中是否包含中文字符。try_convert_to_date
函數(shù)則嘗試將給定的字符串轉(zhuǎn)換為日期,如果無法轉(zhuǎn)換,則返回一個大的日期值(代表無窮大)。
??2. 讀取和整理數(shù)據(jù):然后,在主函數(shù)部分,代碼首先初始化了一個空的列表countries
和一個包含五大洲名稱的列表continent
。然后,通過循環(huán)遍歷每個大洲,讀取相應的txt文件,將數(shù)據(jù)添加到countries
列表中,同時為每行數(shù)據(jù)添加所屬的大洲名稱。
??3. 排序數(shù)據(jù):接下來,使用sorted_countries
列表對數(shù)據(jù)進行排序,排序的依據(jù)是每行數(shù)據(jù)的第三個元素(即日期)。這里使用了前面定義的try_convert_to_date
函數(shù)來轉(zhuǎn)換日期,如果無法轉(zhuǎn)換,則將數(shù)據(jù)放在排序后的列表的最后。
??4. 寫入Excel文件:最后,代碼創(chuàng)建了一個新的Excel工作簿和工作表,將排序后的數(shù)據(jù)寫入到工作表中,然后保存這個Excel文件。
??總的來說,這段代碼的主要作用是從五個txt文件中提取數(shù)據(jù),將數(shù)據(jù)進行排序,并將結(jié)果寫入到一個Excel文件中。
二、整體架構(gòu)流程
??這段代碼的主要流程如下:
??1. 定義了兩個輔助函數(shù):has_chinese_chars
用于判斷一個字符串是否包含中文字符,try_convert_to_date
用于嘗試將一個字符串轉(zhuǎn)換為日期,如果轉(zhuǎn)換失敗,則返回一個最大的日期值。
??2. 在主函數(shù)中,首先初始化了一個空列表countries
,以及一個包含五個大陸名稱的列表continent
。
??3. 對continent
列表進行遍歷,每次遍歷都會讀取一個特定大陸的txt文件(文件路徑由大陸名稱和’.txt’組成),并將讀取的數(shù)據(jù)存儲到DataFrame對象df
中。
??4. 將DataFrame對象轉(zhuǎn)換為一個列表,并在每一行數(shù)據(jù)前添加所屬大陸名稱。
??5. 將修改后的列表擴展到countries
列表中。
??6. 使用sorted
函數(shù)對countries
列表進行排序,排序依據(jù)是子列表的第三個元素(索引為2),使用try_convert_to_date
函數(shù)嘗試將其轉(zhuǎn)換為日期,如果不能轉(zhuǎn)換則視為無窮大。
??7. 創(chuàng)建一個新的Excel工作簿和工作表。
??8. 將排序后的列表的第一行(標題行)寫入工作表。
??9. 將排序后的列表的其他行(數(shù)據(jù)行)寫入工作表。
??10. 保存Excel文件。
??這段代碼的目的是讀取幾個大陸的CSV文件,將它們的數(shù)據(jù)按照日期排序,并將結(jié)果寫入一個Excel文件中。
三、完整代碼
程序所用到的txt數(shù)據(jù)見文末
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2023-09-23 13:17
# @Author : Leuanghing Chen
# @Blog : https://blog.csdn.net/weixin_46153372?spm=1010.2135.3001.5421
# @File : 與中國建交國家.py
# @Software : PyCharmimport pandas as pd
import re
from datetime import datetime, date
from openpyxl import Workbook# 判斷字符串中是否包含中文漢字
def has_chinese_chars(s):pattern = re.compile(u'[\u4e00-\u9fa5]')return bool(pattern.search(s))# 根據(jù)日期排序,含有中文字符的排在所有其他日期之后
def try_convert_to_date(s):try:# 嘗試將字符串轉(zhuǎn)換為日期return datetime.strptime(s, '%Y.%m.%d').date()except ValueError:# 如果轉(zhuǎn)換失敗,返回一個浮點數(shù),比如一個大的值,確保它在排序時處于最后的位置return date.maxif __name__ == '__main__':countries = []continent = ['亞洲', '大洋洲', '歐洲', '非洲', '美洲']for i in range(len(continent)):# 這將讀取一個CSV文件,并返回一個DataFrame對象df = pd.read_csv(r'D:\python_demo\與中國建交國家\statics\{}.txt'.format(continent[i]), delimiter=' ', header=None)# 如果你想要一個列表,你可以將DataFrame轉(zhuǎn)換為一個列表lines = df.values.tolist()# 在每一行數(shù)據(jù)前添加所屬洲for item in lines:item.insert(0, continent[i])# 合并列表countries.extend(lines)# 使用sorted函數(shù)進行排序,將子列表的第三個元素(索引為2)作為排序鍵# 我們使用try_convert_to_date函數(shù)將字符串轉(zhuǎn)換為日期,如果不能轉(zhuǎn)換則視為無窮大sorted_countries = sorted(countries, key=lambda x: try_convert_to_date(x[2]))# 創(chuàng)建工作簿和工作表wb = Workbook()ws = wb.active# 寫入標題行ws.append(sorted_countries[0])# 寫入數(shù)據(jù)行for i in range(1, len(sorted_countries)):ws.append(sorted_countries[i])# 保存Excel文件wb.save("countries.xlsx")
??
附件1:亞洲.txt
阿富汗 1955.1.20
亞美尼亞 1992.4.6
阿塞拜疆 1992.4.2
巴林 1989.4.18
孟加拉國 1975.10.4
文萊 1991.9.30
柬埔寨 1958.7.19
朝鮮 1949.10.6
東帝汶 2002.5.20
格魯吉亞 1992.6.9
印度 1950.4.1
印度尼西亞 1950.4.13
伊朗 1971.8.16
伊拉克 1958.8.25
以色列 1992.1.24
日本 1972.9.29
約旦 1977.4.7
哈薩克斯坦 1992.1.3
科威特 1971.3.22
吉爾吉斯斯坦 1992.1.5
老撾 1961.4.25
黎巴嫩 1971.11.9
馬來西亞 1974.5.31
馬爾代夫 1972.10.14
蒙古 1949.10.16
緬甸 1950.6.8
尼泊爾 1955.8.1
阿曼 1978.5.25
巴基斯坦 1951.5.21
巴勒斯坦 1988.11.20
菲律賓 1975.6.9
卡塔爾 1988.7.9
韓國 1992.8.24
沙特阿拉伯 1990.7.21
新加坡 1990.10.3
斯里蘭卡 1957.2.7
敘利亞 1956.8.1
塔吉克斯坦 1992.1.4
泰國 1975.7.1
土耳其 1971.8.4
土庫曼斯坦 1992.1.6
阿拉伯聯(lián)合酋長國 1984.11.1
烏茲別克斯坦 1992.1.2
越南 1950.1.18
也門 1956.9.24
??
附件2:大洋洲.txt
澳大利亞 1972.12.21
庫克群島 1997.7.25
斐濟 1975.11.5
基里巴斯 1980.6.25(復交日期:2019.9.27)
密克羅尼西亞 1989.9.11
新西蘭 1972.12.22
紐埃 2007.12.12
巴布亞新幾內(nèi)亞 1976.10.12
薩摩亞 1975.11.6
所羅門群島 2019.9.21
湯加 1998.11.2
瓦努阿圖 1982.3.26
??
附件3:歐洲.txt
阿爾巴尼亞 1949.11.23
安道爾 1994.6.29
奧地利 1971.5.28
白俄羅斯 1992.1.20
比利時 1971.10.25
波斯尼亞和黑塞哥維那 1995.4.3
保加利亞 1949.10.4
克羅地亞 1992.5.13
塞浦路斯 1971.12.14
捷克 1949.10.6
丹麥 1950.5.11
愛沙尼亞 1991.9.11
芬蘭 1950.10.28
法國 1964.1.27
德國 1972.10.11
希臘 1972.6.5
匈牙利 1949.10.6
冰島 1971.12.8
愛爾蘭 1979.6.22
意大利 1970.11.6
拉脫維亞 1991.9.12
列支敦士登 1950.9.14
立陶宛 1991.9.14
盧森堡 1972.11.16
馬耳他 1972.1.31
摩爾多瓦 1992.1.30
摩納哥 1995.1.16
黑山 2006.7.6
荷蘭 中荷1972年5月18日建立大使級外交關系(1954年互派代辦)
北馬其頓 1993.10.12
挪威 1954.10.5
波蘭 1949.10.7
葡萄牙 1979.2.8
羅馬尼亞 1949.10.5
俄羅斯 1949.10.2
圣馬力諾 1971.5.6
塞爾維亞 詳見備注
斯洛伐克 1949.10.6
斯洛文尼亞 1992.5.12
西班牙 1973.3.9
瑞典 1950.5.9
瑞士 1950.9.14
烏克蘭 1992.1.4
英國 中英1972年3月13日建立大使級外交關系(1954年互派代辦)
??
附件4:美洲.txt
安提瓜和巴布達 1983.1.1
阿根廷 1972.2.19
巴哈馬 1997.5.23
巴巴多斯 1977.5.30
玻利維亞 1985.7.9
巴西 1974.8.15
加拿大 1970.10.13
智利 1970.12.15
哥倫比亞 1980.2.7
哥斯達黎加 2007.6.1
古巴 1960.9.28
多米尼克 2004.3.23
多米尼加 2018.5.1
厄瓜多爾 1980.1.2
薩爾瓦多 2018.8.21
格林納達 1985.10.1
圭亞那 1972.6.27
牙買加 1972.11.21
墨西哥 1972.2.14
尼加拉瓜 1985.12.7(復交日期:2021.12.10)
巴拿馬 2017.6.13
秘魯 1971.11.2
蘇里南 1976.5.28
特立尼達和多巴哥 1974.6.20
美國 1979.1.1
烏拉圭 1988.2.3
委內(nèi)瑞拉 1974.6.28
??
附件5:非洲.txt
阿爾及利亞 1958.12.20
安哥拉 1983.1.12
貝寧 1964.11.12
博茨瓦納 1975.1.6
布基納法索 1973.9.15
布隆迪 1963.12.21
喀麥隆 1971.3.26
佛得角 1976.4.25
中非 1964.9.29
乍得 1972.11.28
科摩羅 1975.11.13
剛果(金) 1961.2.20
剛果(布) 1964.2.22
科特迪瓦 1983.3.2
吉布提 1979.1.8
埃及 1956.5.30
赤道幾內(nèi)亞 1970.10.15
厄立特里亞 1993.5.24
埃塞俄比亞 1970.11.24
加蓬 1974.4.20
岡比亞 1974.12.14
加納 1960.7.5
幾內(nèi)亞 1959.10.4
幾內(nèi)亞比紹 1974.3.15
肯尼亞 1963.12.14
萊索托 1983.4.30
利比里亞 1977.2.17
利比亞 1978.8.9
馬達加斯加 1972.11.6
馬拉維 2007.12.28
馬里 1960.10.25
毛里塔尼亞 1965.7.19
毛里求斯 1972.4.15
摩洛哥 1958.11.1
莫桑比克 1975.6.25
納米比亞 1990.3.22
尼日爾 1974.7.20
尼日利亞 1971.2.10
盧旺達 1971.11.12
圣多美和普林西比 1975.7.12
塞內(nèi)加爾 1971.12.7
塞舌爾 1976.6.30
塞拉利昂 1971.7.29
索馬里 1960.12.14
南非 1998.1.1
南蘇丹 2011.7.9
蘇丹 1959.2.4
坦桑尼亞 1964.4.26
多哥 1972.9.19
突尼斯 1964.1.10
烏干達 1962.10.18
贊比亞 1964.10.29
津巴布韋 1980.4.18