python - Python:遍历字符串列表并将它们与类对象相关联
问题描述
我创建了一个名为 Tables 的类,它具有用于在 MySQL 中创建表的name
、ddl
和cols
属性。
我有一个名为的所有 Table 对象的列表mylist
。
我有一个名为的所有 Table 对象名称的列表tables
。
我有一个 csv 的剥离文件名列表,我将使用它来将数据加载到名为list_files
.
如果 in 中的项目list_files
与 Table 对象的 in 匹配name
,mylist
我想将 Table 对象中列出的列中的数据插入cols
到关联的 MySQL 表中 - 换句话说,我想将列表项用作具有匹配名称的 Table 对象。
一旦我弄清楚如何使用字符串 inlist_files
作为现有 Table 对象的名称,我就可以构建 INSERT 语句。
到目前为止,这是我的代码:
from pathlib import Path
mylist = []
class Table:
table_list = mylist
def __init__(self, name, ddl):
self.name = name
self.ddl = ddl
self.cols = []
self.skip_id = False # indicates whether to skip the AUTO_INCREMENT '_id'
# column on import/update
def add_to_list(self, table_list):
table_list.append(self)
def add_cols(self):
text = self.ddl.split('`')
self.cols = text[3::2]
def skip_auto_inc_id(self):
if 'AUTO_INCREMENT' in self.ddl:
self.skip_id = True
# 2 example Table objects
sub_leagues = Table('sub_leagues', '''CREATE TABLE IF NOT EXISTS `sub_leagues` (
`subl_id` INT PRIMARY KEY,
`league_id` INT,
`sub_league_id` INT,
`name` VARCHAR(50),
)
ENGINE=InnoDB DEFAULT CHARSET=latin1''')
sub_leagues.add_to_list(mylist)
divisions = Table('divisions', '''CREATE TABLE IF NOT EXISTS `divisions` (
`d_id` INT AUTO_INCREMENT PRIMARY KEY,
`league_id` INT,
`sub_league_id` INT,
`division_id` INT,
`name` VARCHAR(50),
`gender` INT
)
ENGINE=InnoDB DEFAULT CHARSET=latin1''')
divisions.add_to_list(mylist)
tables = []
for table in mylist:
table.add_cols()
table.skip_auto_inc_id()
if table.skip_id:
table.cols = table.cols[1:]
tables.append(table.name)
files = ['sub_leagues.csv', 'divisions.csv']
list_files = []
for file in files:
filename = Path(file).stem
list_files.append(filename)
# This is where I'm stumped
for filename in list_files:
if filename in tables:
print(filename.cols)
这显然不起作用,但我想将其filename
视为具有相同名称的 Table 对象,并且不确定正确的方法。
解决方案
您可以制作一个字典来将文件名映射到 Table 对象:
tables = {}
for table in mylist:
table.add_cols()
table.skip_auto_inc_id()
if table.skip_id:
table.cols = table.cols[1:]
tables[table.name] = table
for filename in list_files:
if filename in tables:
table = tables[filename]
推荐阅读
- ios - 无法让 .Net Embedding 的 objcgen.exe 将我在 Windows 上的 Visual Studio 2019 Xamarin.IOS 项目转换为我在 MacOS 上的 Xcode 项目
- google-apps-script - Google 表格 - 基于列表的文本替换(不是整个单元格)
- c# - 如何将父级转换为子级以在 C# 中调用正确的函数
- c# - C# - 函数跳过“if”循环
- kentico - 如何在首次使用时重置自动生成的 Kentico 密码?
- javascript - Formik,子组件中的useField()?
- uwp - 错误 APPX1204:无法签署 UWP 项目
- docker - 如何在启用 GUI 的情况下重新启动 ROS docker 容器
- pyspark - AWS 胶水 pyspark - 将源表中的一行转换为目标中的多行
- postgresql - 如何将两个小时添加到时间戳值,然后将其重新转换为仅包含小时和分钟的字符串?