gpt4 book ai didi

用于 tsv 平面文件的 python/bash SQL(无 sqlite)

转载 作者:太空宇宙 更新时间:2023-11-03 11:09:58 25 4
gpt4 key购买 nike

背景:

sqlite 非常适合对加载到数据库中的数据执行 SQL 操作,但在我的工作中很多时候我需要对未加载到数据库中的文件执行选择、连接和 where 语句,而且不一定值得是时候加载/初始化数据库了。此外,sqlite 的随机访问特性通常会使对数据库中每一行执行的操作变慢。

问题:

是否有一套 SQL 类型命令/fxns(最好是 python/bash)不需要 sqlite 并且只在原始制表符间隔文件上工作?例如,不使用表格来选择行,而是使用列号。

例子

select col1,col2,col3 from fileName.tsv where col1[int] < 3

注意:我意识到其中很多可以通过 awk、cut、bash-join 等来完成;我想知道是否有更多类似 SQL 的东西?

最佳答案

您可以使用 csv 模块和 list comprehensions 一起破解一些东西:

import csv

reader = csv.reader(open('data.csv', 'r'))
rows = [row for row in reader]

# select * from data where first column < 4
# this won't actually work as-is! see the edit below
[row for row in rows if row[0] < 4]

# select * from data where second column >= third column
[row for row in rows if row[1] >= row[2]]

# select columns 1 and 3 from data where first column is "mykey"
[[row[0], row[2]] for row in rows if row[0] == "mykey"]

您可能可以使用 Python 的 functional programming tools 做一些更令人印象深刻的事情,尽管如果您还不熟悉 FP,那么仅仅为此学习它可能是一个太大的主题;-)


编辑:更多提示:

  • 如果您只打算为每个脚本执行一次“查询”,则可以去掉数据的中间存储(在我的示例中为 ):

    import csv
    reader = csv.reader(open('data.csv', 'r'))
    result = [row for row in reader if row[0] == "banana"]
  • csv 阅读器将其所有输出生成为文本,因此如果您想将一列视为例如一个整数,你必须自己做。例如,如果您的第二列和第三列是整数,

    import csv
    reader = csv.reader(open('data.csv', 'r'))
    rows = [[row[0], int(row[1]), int(row[2])] for row in reader]
    # perform a "select" on rows now

    (这意味着我上面的第一个示例实际上不会按原样工作。)如果您的所有列都是整数,那么您可以调用函数式 map 函数:

    import csv
    reader = csv.reader(open('data.csv', 'r'))
    rows = [map(int, row) for row in reader]

关于用于 tsv 平面文件的 python/bash SQL(无 sqlite),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7492972/

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