gpt4 book ai didi

python - 在 Python 中使用 mdbtools 从 .mdb 文件中提取和排序数据

转载 作者:搜寻专家 更新时间:2023-10-30 20:18:54 26 4
gpt4 key购买 nike

我是 Python 的新手,所以任何帮助都将不胜感激。我正在尝试在 Linux 上使用 mdbtools 从 2000 个 .mdb 文件中提取和排序数据。到目前为止,我只能获取 .mdb 文件并将所有表转储到 .csv 中。它造成了巨大的困惑,因为有很多文件需要处理。

我需要的是从特定表中提取特定排序的数据。例如,我需要名为“电压”的表格。该表由许多循环组成,每个循环也有几行。循环通常按时间顺序进行,但在某些情况下时间戳会延迟记录。就像循环的第一行可以比循环 1 的第一行有更晚的时间。我需要根据前五个周期的时间提取周期的最新行。例如,在下表中,我需要第二行。

Cycle#    Time        Data
1 100.59 34
1 101.34 54
1 98.78 45
2
2
2 ...........

这是我使用的脚本。我正在使用命令 python extract.py table_files.mdb. 但我希望只使用 ./extract.py 调用脚本。文件名的路径应该在脚本本身中。

import sys, subprocess, os

DATABASE = sys.argv[1]

subprocess.call(["mdb-schema", DATABASE, "mysql"])

# Get the list of table names with "mdb-tables"
table_names = subprocess.Popen(["mdb-tables", "-1", DATABASE],
stdout=subprocess.PIPE).communicate()[0]
tables = table_names.splitlines()

print "BEGIN;" # start a transaction, speeds things up when importing
sys.stdout.flush()

# Dump each table as a CSV file using "mdb-export",
# converting " " in table names to "_" for the CSV filenames.
for table in tables:
if table != '':
filename = table.replace(" ","_") + ".csv"
file = open(filename, 'w')
print("Dumping " + table)
contents = subprocess.Popen(["mdb-export", DATABASE, table],
stdout=subprocess.PIPE).communicate()[0]
file.write(contents)
file.close()

最佳答案

就我个人而言,我不会花很多时间来尝试让 mdbtoolsunixODBCpyodbc 协同工作。正如 Pedro 在他的评论中建议的那样,如果您可以使用 mdb-export 将表转储为 CSV 文件,那么只需将这些 CSV 文件导入到 SQLite 或 MySQL 中,您就可以节省大量时间,即,比在 Linux 平台上使用 mdbtools 更健壮的东西。

一些建议:

  1. 鉴于所涉及的 .mdb 文件(以及因此 .csv 文件)的绝对数量,您可能希望将 CSV 数据导入一个大的带有附加列的表,用于指示源文件名。这将比约 2000 个单独的表更容易管理。

  2. 在新数据库中创建目标表时,您可能希望为 [Time ] 列。

  3. 同时,将 [Cycle#] 列重命名为 [Cycle]。列名称中的“有趣的字符”可能是一个真正的麻烦。

最后,要为给定的 [SourceFile] 和 [Cycle] 选择“最后”读数(最大 [Time] 值),您可以使用如下查询:

SELECT
v1.SourceFile,
v1.Cycle,
v1.Time,
v1.Data
FROM
Voltage v1
INNER JOIN
(
SELECT
SourceFile,
Cycle,
MAX([Time]) AS MaxTime
FROM Voltage
GROUP BY SourceFile, Cycle
) v2
ON v1.SourceFile=v2.SourceFile
AND v1.Cycle=v2.Cycle
AND v1.Time=v2.MaxTime

关于python - 在 Python 中使用 mdbtools 从 .mdb 文件中提取和排序数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17123550/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com