如何使用标准csv.reader方法按分号拆分CSV文件中的SQL语句?
能否用标准csv.reader按分号拆分CSV中的SQL语句?
很遗憾,标准的csv.reader没办法直接帮你按分号拆分内容得到目标列表哦。
为什么不行?
csv.reader的设计目标是解析结构化的CSV格式数据——它会按照指定的分隔符(默认是逗号)将每行内容拆分成多个字段,而不是作为通用文本拆分工具,按你指定的分号来分割整个文件的内容。你的CSV文件里的内容是连续的SQL语句,csv.reader只会按CSV规则读取每行/每个字段,不会主动识别分号并拆分。
用csv.reader实现需求的方法
虽然不能直接拆分,但你可以先通过csv.reader读取文件的全部内容,拼接成完整的文本后再按分号拆分,具体代码如下:
import csv with open("my_file.csv", newline='', encoding="utf8") as csvfile: reader = csv.reader(csvfile) # 将所有行的内容拼接成一个完整的字符串 full_sql_content = ''.join([''.join(row) for row in reader]) # 按分号拆分,同时清理掉空字符串和多余空格 sql_statements = [stmt.strip() for stmt in full_sql_content.split(';') if stmt.strip()] # 输出结果就是包含2个SQL语句的列表 print(sql_statements)
这段代码的逻辑是:
- 先用
csv.reader读取文件的每一行,把每行的所有字段(如果你的CSV每行是单个字段的话,''.join(row)就是该行内容)拼接成完整的SQL文本 - 再用
split(';')拆分文本,最后通过列表推导式过滤掉拆分后产生的空字符串和纯空格内容,得到干净的SQL语句列表
补充:你提到的Pandas方法
如果你用pandas.read_csv,思路类似——先读取所有内容拼接成文本再拆分,比如:
import pandas as pd df = pd.read_csv("my_file.csv", header=None) full_sql_content = ''.join(df[0].astype(str)) sql_statements = [stmt.strip() for stmt in full_sql_content.split(';') if stmt.strip()]
内容的提问来源于stack exchange,提问作者Valentyn




