提取多个txt数据并合成excel——例子:与中国建交的国家

提取多个txt数据并合成excel——例子:与中国建交的国家

  • 一、概要
  • 二、整体架构流程
  • 三、完整代码

一、概要

  这段代码主要执行以下任务:

  1. 定义辅助函数:首先,定义了两个辅助函数。has_chinese_chars函数用于检查给定的字符串中是否包含中文字符。try_convert_to_date函数则尝试将给定的字符串转换为日期,如果无法转换,则返回一个大的日期值(代表无穷大)。
  2. 读取和整理数据:然后,在主函数部分,代码首先初始化了一个空的列表countries和一个包含五大洲名称的列表continent。然后,通过循环遍历每个大洲,读取相应的txt文件,将数据添加到countries列表中,同时为每行数据添加所属的大洲名称。
  3. 排序数据:接下来,使用sorted_countries列表对数据进行排序,排序的依据是每行数据的第三个元素(即日期)。这里使用了前面定义的try_convert_to_date函数来转换日期,如果无法转换,则将数据放在排序后的列表的最后。
  4. 写入Excel文件:最后,代码创建了一个新的Excel工作簿和工作表,将排序后的数据写入到工作表中,然后保存这个Excel文件。

  总的来说,这段代码的主要作用是从五个txt文件中提取数据,将数据进行排序,并将结果写入到一个Excel文件中。

二、整体架构流程

  这段代码的主要流程如下:

  1. 定义了两个辅助函数:has_chinese_chars用于判断一个字符串是否包含中文字符,try_convert_to_date用于尝试将一个字符串转换为日期,如果转换失败,则返回一个最大的日期值。
  2. 在主函数中,首先初始化了一个空列表countries,以及一个包含五个大陆名称的列表continent
  3. 对continent列表进行遍历,每次遍历都会读取一个特定大陆的txt文件(文件路径由大陆名称和’.txt’组成),并将读取的数据存储到DataFrame对象df中。
  4. 将DataFrame对象转换为一个列表,并在每一行数据前添加所属大陆名称。
  5. 将修改后的列表扩展到countries列表中。
  6. 使用sorted函数对countries列表进行排序,排序依据是子列表的第三个元素(索引为2),使用try_convert_to_date函数尝试将其转换为日期,如果不能转换则视为无穷大。
  7. 创建一个新的Excel工作簿和工作表。
  8. 将排序后的列表的第一行(标题行)写入工作表。
  9. 将排序后的列表的其他行(数据行)写入工作表。
  10. 保存Excel文件。

  这段代码的目的是读取几个大陆的CSV文件,将它们的数据按照日期排序,并将结果写入一个Excel文件中。

三、完整代码

程序所用到的txt数据见文末

#!/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 : PyCharm

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


# 根据日期排序,含有中文字符的排在所有其他日期之后
def try_convert_to_date(s):
    try:
        # 尝试将字符串转换为日期
        return datetime.strptime(s, '%Y.%m.%d').date()
    except ValueError:
        # 如果转换失败,返回一个浮点数,比如一个大的值,确保它在排序时处于最后的位置
        return date.max


if __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转换为一个列表
        lines = df.values.tolist()

        # 在每一行数据前添加所属洲
        for item in lines:
            item.insert(0, continent[i])

        # 合并列表
        countries.extend(lines)

    # 使用sorted函数进行排序,将子列表的第三个元素(索引为2)作为排序键
    # 我们使用try_convert_to_date函数将字符串转换为日期,如果不能转换则视为无穷大
    sorted_countries = sorted(countries, key=lambda x: try_convert_to_date(x[2]))

    # 创建工作簿和工作表
    wb = Workbook()
    ws = wb.active

    # 写入标题行
    ws.append(sorted_countries[0])

    # 写入数据行
    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
阿拉伯联合酋长国 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
巴布亚新几内亚 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
委内瑞拉 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
赤道几内亚 1970.10.15
厄立特里亚 1993.5.24
埃塞俄比亚 1970.11.24
加蓬 1974.4.20
冈比亚 1974.12.14
加纳 1960.7.5
几内亚 1959.10.4
几内亚比绍 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
塞内加尔 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

你可能感兴趣的:(excel,txt,python,openpyxl,pandas,笔记,经验分享)