如何用Python Jupyter拆分SQL Server中含波斯字符的列至多列
如何在Python Jupyter中将SQL Server列中的波斯语字符串拆分为多列
嘿,我来帮你搞定这个问题!从你给出的示例字符串 \ارزگان\جلد 10 اصل اساس سال 1353 مرکز(ترینکوت) ولایت ارزگان\138.pdf 来看,它的结构很清晰,我们可以用Python结合正则表达式、pandas和SQL Server驱动来拆分出需要的多列。下面是一步步的实现方法,直接在Jupyter里就能跑:
第一步:把数据从SQL Server读到Jupyter里
首先得确保你装了必要的库,在Jupyter的单元格里先运行这个安装命令:
!pip install pyodbc pandas
然后写连接SQL Server的代码,把你要处理的表读成pandas的DataFrame:
import pyodbc import pandas as pd # 替换成你自己的SQL Server连接信息 conn_str = ( r'DRIVER={ODBC Driver 17 for SQL Server};' r'SERVER=你的服务器地址;' r'DATABASE=目标数据库名;' r'UID=你的用户名;' r'PWD=你的密码;' ) # 连接数据库并读取数据,把`你的目标列名`和`你的表名`替换成实际名称 with pyodbc.connect(conn_str) as conn: df = pd.read_sql("SELECT 你的目标列名 FROM 你的表名", conn)
第二步:写个拆分函数提取关键信息
你的字符串里包含省份、卷数、年份、中心名称和文件名这些信息,我们用正则表达式来精准提取。注意波斯语字符可以用\p{Persian}来匹配,要记得加re.UNICODE标志:
import re def parse_persian_file_path(s): # 先按反斜杠拆分路径,拿到各个段 path_segments = s.split('\\') # 示例里中间的描述段是第3个元素(索引2),文件名是第4个(索引3) content_segment = path_segments[2] filename = path_segments[3] # 提取卷数:找"جلد "后面的数字 vol_match = re.search(r'جلد (\d+)', content_segment) volume = vol_match.group(1) if vol_match else None # 提取年份:找"سال "后面的数字 year_match = re.search(r'سال (\d+)', content_segment) year = year_match.group(1) if year_match else None # 提取中心名称:匹配括号里的波斯语内容 center_match = re.search(r'\((\p{Persian}+)\)', content_segment, re.UNICODE) center_name = center_match.group(1) if center_match else None # 省份直接从第一个路径段拿(索引1),或者也可以从描述段里的"ولایت "后面提取 province = path_segments[1] # 返回拆分后的各个字段,用Series方便直接合并到DataFrame return pd.Series([province, volume, year, center_name, filename], index=['省份', '卷数', '年份', '中心名称', '文件名'])
第三步:把函数应用到DataFrame上,生成新列
假设你的目标列名叫file_path,运行下面的代码就能生成拆分后的列:
# 应用拆分函数,新增列到原DataFrame df[['省份', '卷数', '年份', '中心名称', '文件名']] = df['file_path'].apply(parse_persian_file_path) # 看看结果 df.head()
一些小提示
- 如果你的字符串有不同的格式变种(比如有些行没有括号里的中心名),可以调整正则表达式的匹配逻辑,比如给部分匹配加非强制的条件。
- 波斯语是从右到左书写,但在Python字符串里是按存储顺序处理的,所以正则匹配不用管书写方向,直接按字符顺序来就行。
- 如果遇到乱码问题,检查下SQL Server连接的编码,试试在连接字符串里加
CHARSET=UTF-8,确保字符编码一致。
内容的提问来源于stack exchange,提问作者Awen Karimi
相关产品推荐
相关产品推荐

