当前位置: 首页 > news >正文

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

相关文章:

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

提取多个txt数据并合成excel——例子:与中国建交的国家 一、概要二、整体架构流程三、完整代码 一、概要 这段代码主要执行以下任务: 1. 定义辅助函数:首先,定义了两个辅助函数。has_chinese_chars函数用于检查给定的字符串中是否…...

uni-app:js修改元素样式(宽度、外边距)

效果 代码 1、在<view>元素上添加一个ref属性&#xff0c;用于在JavaScript代码中获取对该元素的引用&#xff1a;<view ref"myView" id"mybox"></view> 2、获取元素引用 &#xff1a;const viewElement this.$refs.myView.$el; 3、修改…...

day36-单元测试

1. 单元测试Junit 1.1 什么是单元测试&#xff1f;&#xff08;掌握&#xff09; 对部分代码进行测试。 1.2 Junit的特点&#xff1f;&#xff08;掌握&#xff09; 是一个第三方的工具。&#xff08;把别人写的代码导入项目中&#xff09;&#xff08;专业叫法&#xff1a;…...

7、脏话检测

6、片花关联长视频 脏话检测功能本身远不如上一篇介绍的片花关联长视频有技术挑战性&#xff0c;不过还是值得说说&#xff0c;因为这是我们采用技术方式提高工作效率的第一次尝试。 游戏解说是审核难度比较大的一类短视频内容&#xff0c;一方面是时间比较长&#xff0c;很多…...

Godot信号教程(使用C#语言)| 创建自定义信号 | 发出自定义信号 | 使用代码监听信号

文章目录 信号是什么连接信号使用编辑器连接信号使用代码连接信号Lambda 自定义信号声明信号发射信号带参数的信号 其他文章 信号是什么 在Godot游戏引擎中&#xff0c;信号是一种用于对象之间通信的重要机制。它允许一个对象发出信号&#xff0c;而其他对象可以连接到这个信号…...

分布式文件存储系统minio、大文件分片传输

上传大文件 1、Promise对象 Promise 对象代表一个异步操作&#xff0c;有三种状态&#xff1a; pending: 初始状态&#xff0c;不是成功或失败状态。fulfilled: 意味着操作成功完成。rejected: 意味着操作失败。 只有异步操作的结果&#xff0c;可以决定当前是哪一种状态&a…...

在 msys2/mingw 下安装及编译 opencv

最简单就是直接安装 pacman -S mingw-w64-x86_64-opencv 以下记录一下编译的过程 1. 安装编译工具及第三方库 pacman -S --needed base-devel mingw-w64-x86_64-toolchain unzip gccpacman -S python mingw-w64-x86_64-python2 mingw-w64-x86_64-gtk3 mingw-w64-x86_64-…...

java 根据身份证号码判断性别

在Java中&#xff0c;您可以根据身份证号码的规则来判断性别。中国的身份证号码通常采用的是以下规则&#xff1a; 第17位数字代表性别&#xff0c;奇数表示男性&#xff0c;偶数表示女性。 通常&#xff0c;男性的出生日期的第15、16位数字是01&#xff0c;女性是02。 请注意&…...

信息服务上线渗透检测网络安全检查报告和解决方案4(XSS漏洞修复)

系列文章目录 信息服务上线渗透检测网络安全检查报告和解决方案2(安装文件信息泄漏、管理路径泄漏、XSS漏洞、弱口令、逻辑漏洞、终极上传漏洞升级)信息服务上线渗透检测网络安全检查报告和解决方案信息服务上线渗透检测网络安全检查报告和解决方案3(系统漏洞扫描、相对路径覆…...

【SQL】mysql创建定时任务执行存储过程--20230928

1.先设定时区 https://blog.csdn.net/m0_46629123/article/details/133382375 输入命令show variables like “%time_zone%”;&#xff08;注意分号结尾&#xff09;设置时区&#xff0c;输入 set global time_zone “8:00”; 回车,然后退出重启&#xff08;一定记得重启&am…...

安全基础 --- MySQL数据库解析

MySQL的ACID &#xff08;1&#xff09;ACID是衡量事务的四个特性 原子性&#xff08;Atomicity&#xff0c;或称不可分割性&#xff09;一致性&#xff08;Consistency&#xff09;隔离性&#xff08;Isolation&#xff09;持久性&#xff08;Durability&#xff09; &…...

软件设计师考试学习3

开发模型 瀑布模型 现在基本被淘汰了 是一种结构化方法中的模型&#xff0c;一般用于结构化开发 问题在于需求阶段需求不可能一次搞清楚&#xff0c;很可能做完推翻重做 适用于需求明确或二次开发 原型模型、演化模型、增量模型 原型是为了解决需求不明确的问题 原型在项目…...

使用LDA(线性判别公式)进行iris鸢尾花的分类

线性判别分析((Linear Discriminant Analysis &#xff0c;简称 LDA)是一种经典的线性学习方法&#xff0c;在二分类问题上因为最早由 [Fisher,1936] 提出&#xff0c;亦称 ”Fisher 判别分析“。并且LDA也是一种监督学习的降维技术&#xff0c;也就是说它的数据集的每个样本都…...

王学岗生成泛型的简易Builder

github大佬地址 使用 //class 可以传参DataBean.classpublic static <T> T handlerJson(String json, Class<T> tClass) {T resultData null;if (CommonUtils.StringNotNull(json) && !nullString.equals(json)) {if (isArray(json)) {resultData BaseN…...

kafka消息队列简单使用

下面是使用Spring Boot和Kafka实现消息队列的简单例子&#xff1a; 引入依赖 在pom.xml中添加以下依赖&#xff1a; <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId><version>2.7.5&l…...

性能优化实战使用CountDownLatch

1.分析问题 原程序是分页查询EventAffinityScoreDO表的数据&#xff0c;每次获取2000条在一个个遍历去更新EventAffinityScoreDO表的数据。但是这样耗时比较慢&#xff0c;测试过30万的数据需要2小时 private void eventSubjectHandle(String tenantId, String eventSubject) …...

基于视频技术与AI检测算法的体育场馆远程视频智能化监控方案

一、方案背景 近年来&#xff0c;随着居民体育运动意识的增强&#xff0c;体育场馆成为居民体育锻炼的重要场所。但使用场馆内的器材时&#xff0c;可能发生受伤意外&#xff0c;甚至牵扯责任赔偿纠纷问题。同时&#xff0c;物品丢失、人力巡逻成本问题突出&#xff0c;体育场…...

leetcodetop100(29) K 个一组翻转链表

K 个一组翻转链表 给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍&#xff0c;那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改…...

最新影视视频微信小程序源码-带支付和采集功能/微信小程序影视源码PHP(更新)

源码简介&#xff1a; 这个影视视频微信小程序源码&#xff0c;新更新的&#xff0c;它还带支付和采集功能&#xff0c;作为微信小程序影视源码&#xff0c;它可以为用户 提供丰富的影视资源&#xff0c;包括电影、电视剧、综艺节目等。 这个小程序影视源码&#xff0c;还带有…...

C++:vector 定义,用法,作用,注意点

C 中的 vector 是标准模板库&#xff08;STL&#xff09;提供的一种动态数组容器&#xff0c;它提供了一组强大的方法来管理和操作可变大小的数组。以下是关于 vector 的定义、用法、作用以及一些注意点&#xff1a; 定义&#xff1a; 要使用 vector&#xff0c;首先需要包含 …...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

三分算法与DeepSeek辅助证明是单峰函数

前置 单峰函数有唯一的最大值&#xff0c;最大值左侧的数值严格单调递增&#xff0c;最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值&#xff0c;最小值左侧的数值严格单调递减&#xff0c;最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码"&#xff1a;Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力&#xff0c;从金融交易到交通管控&#xff0c;这些关乎国计民生的关键领域…...