You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 15:08:15