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

news/2024/7/21 4:13:50 标签: excel, txt, python, openpyxl, pandas, 笔记, 经验分享

提取多个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数据见文末

python">#!/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

http://www.niftyadmin.cn/n/5056297.html

相关文章

PICO首届XR开发者挑战赛正式启动,助推行业迈入“VR+MR”新阶段

9月25日,“PICO 2023首届XR开发者挑战赛”(下文简称“挑战赛”)媒体启动会在北京圆满落幕,官方赛事报名通道已于今日开启。据悉,本次挑战赛是PICO首次针对全球开发者举办的大型挑战赛事,旨在与开发者保持连…

数字孪生智慧能源:风光储一体化能源中心

自“双碳”目标提出以来,我国能源产业不断朝着清洁低碳化、绿色化的方向发展。其中,风能、太阳能等可再生能源在促进全球能源可持续发展、共建清洁美丽世界中被寄予厚望。风能、太阳能具有波动性、间歇性、随机性等特点,主要通过转化为电能再…

上网Tips: Linux截取动态效果图工具_byzanz

链接1 链接2 安装: sudo apt-get install byzanz 查看指令 说明 byzanz-record --help日常操作 xwininfo点击 待录制窗口 左上角 byzanz-record -x 72 -y 64 -w 1848 -h 893 -d 10 --delay5 -c /home/xixi/myGIF/test.gif小工具 获取鼠标坐标 xdotool getm…

ROS的通信机制

ROS是一个分布式框架,为用户提供多节点(进程)之间的通信服务,所有软件功能和工 具都建立在这种分布式通信机制上,所以ROS的通信机制是最底层也是最核心的技术。在大多数应用场景下,尽管我们不需要关注底层通…

【小笔记】fasttext文本分类问题分析

【学而不思则罔,思维不学则怠】 2023.9.28 关于fasttext的原理及实战文章很多,我也尝试在自己的任务中进行使用,是一个典型的短文本分类任务,对知识图谱抽取的实体进行校验,判断实体类别是否正确,我构建了…

代理IP和Socks5代理在游戏领域的重要应用

随着在线游戏的兴起,网络工程师在游戏领域的作用变得愈发关键。他们不仅需要优化网络性能,还需要确保游戏体验的流畅性。本文将深入探讨代理IP和Socks5代理在游戏领域的关键应用和影响。 降低游戏延迟 在竞技游戏和多人在线游戏中,低延迟是…

ubuntu16编译linux源码内核

一、环境准备 1.1、安装虚拟机ubuntu16 编译内核大概需要20G的磁盘空间,所以硬盘大小尽量大于40G网络适配使用桥接 1.1.1、查看当前内核版本 uname -r1.2、安装samba服务 Samba 是一款数据共享的软件,可用于 Ubuntu 与 Windows 之间共享源代码&#…

互斥锁与条件变量的使用(c || c++ || python)

python import threading# 创建Event对象 event threading.Event()# 线程函数 def thread_function():print("Thread is waiting for event to be set")event.wait()print("Event is set. Thread is continuing")# 创建线程 thread threading.Thread(ta…