V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
shallyy
V2EX  ›  问与答

Python 读取 csv 文件存到 redis

  •  
  •   shallyy · 2017-07-26 18:28:20 +08:00 · 2410 次点击
    这是一个创建于 2676 天前的主题,其中的信息可能已经有所发展或是发生改变。

    很简单的需求 找了个轮子 愣是没做好 https://codereview.stackexchange.com/a/78380 我的 csv 只有一列 应该怎么用...

    5 条回复    2017-07-27 14:10:59 +08:00
    binjjam
        1
    binjjam  
       2017-07-26 21:46:21 +08:00   ❤️ 1
    需求很简单,但是你没写啊老哥。比如你是要整个 csv 作为一个字符串存到 redis 里,下次整个取出来;或者说把每行当成一个列表的元素,把 csv 塞到 redis 的 list 里面。
    shallyy
        2
    shallyy  
    OP
       2017-07-27 09:11:06 +08:00
    @binjjam 我是想把每行当成一个列表 请问该怎么做
    binjjam
        3
    binjjam  
       2017-07-27 13:21:08 +08:00   ❤️ 1
    @shallyy
    我觉得还是给下 CSV 内容的部分示例,以及需要处理成什么样
    比如有个单列的 CSV 文件,内容大概是
    1.content1
    2.content1
    3.content1
    4.content1
    需要将每行存为 redis 的 list,虽然 CSV 是单列,但是每行文件是否要以什么分割符切割成多个项?还是单纯把每行存为 1 个只有单个元素的 list ?那么 list 的键名是啥?
    像上述 CSV 内容如果单纯每行当成一个 redis 的 list


    #coding=u8
    import redis
    REDIS_HOST = 'localhost'
    REDIS_PASS = 'youpasswd' #如果没密码的话,这里是空字符串
    REDIS_PORT = 6379
    REDIS_DB = 0
    redis_conn = redis.StrictRedis(host=REDIS_HOST, password=REDIS_PASS, port=REDIS_PORT, db=REDIS_DB)
    cache_prefix = 'csv' #redis key 前缀

    csv_file = '/path/to/file' #CSV 文件的位置
    with open(csv_file) as workfile:
    for line_num, line in enumerate(workfile, 1):
    line = line.strip()
    cache_key = '%s_%s' % (cache_prefix, line_num)
    redis_conn.lpush(cache_key, line)

    这样就把 csv 每行存到 redis 0 号 db 的 csv_行号里。但是这样做很奇怪。。。
    上面代码没有考虑任何效率问题,文件不大的话就没有什么所谓
    binjjam
        4
    binjjam  
       2017-07-27 13:22:15 +08:00   ❤️ 1
    shallyy
        5
    shallyy  
    OP
       2017-07-27 14:10:59 +08:00
    @binjjam 非常感谢 已经解决了 谢谢.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2534 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 01:49 · PVG 09:49 · LAX 17:49 · JFK 20:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.