当前位置: 首页 > 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;首先需要包含 …...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O…...

使用SSE解决获取状态不一致问题

使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件&#xff0c;这个上传文件是整体功能的一部分&#xff0c;文件在上传的过程中…...

快速排序算法改进:随机快排-荷兰国旗划分详解

随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...

篇章二 论坛系统——系统设计

目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...