【问题标题】:Python Hash not being updated in csv file outputPython Hash 未在 csv 文件输出中更新
【发布时间】:2015-03-13 15:01:05
【问题描述】:

我有一个工作代码,它采用一个 csv 文件目录并对每一行的一列进行哈希处理,然后将所有文件聚合在一起。问题是输出只显示第一个哈希值,而不是为每一行重新运行哈希。代码如下:

 import glob
 import hashlib

 files = glob.glob( '*.csv' )
 output="combined.csv"

 with open(output, 'w' ) as result:
     for thefile in files:
        f = open(thefile)
        m = f.readlines()
        for line in m[1:]:
            fields = line.split()       
            hash_object = hashlib.md5(b'(fields[2])')
            newline = fields[0],fields[1],hash_object.hexdigest(),fields[3]
            joined_line = ','.join(newline)
            result.write(joined_line+ '\n')
  f.close()

【问题讨论】:

  • 为什么这样:hash_object = hashlib.md5(b'(fields[2])'),这应该是这样的:hash_object = hashlib.md5(fields[2]),但转换为二进制格式,否则你只有常量字符串'fields[2]'

标签: python csv hash


【解决方案1】:

您正在创建一个 固定字节串 b'(fields[2])' 的散列。该值与您的 CSV 数据无关,即使它使用的字符与您的行变量名称中使用的字符相同。

您需要从实际行中传入字节

hash_object = hashlib.md5(fields[2].encode('utf8'))

我假设您的 fields[2] 列是一个字符串,因此您需要先对其进行编码以获取字节。 UTF-8 编码可以处理所有可能包含在字符串中的代码点。

您似乎也在重新发明 CSV 读写轮;您可能应该改用csv module

 import csv

 # ...

 with open(output, 'w', newline='') as result:
     writer = csv.writer(result)

     for thefile in files:
        with open(thefile, newline='') as f:
            reader = csv.reader(f)
            next(reader, None)  # skip first row
            for fields in reader:
                hash_object = hashlib.md5(fields[2].encode('utf8'))
                newrow = fields[:2] + [hash_object.hexdigest()] + fields[3:]
                writer.writerow(newrow)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    • 2018-02-18
    • 2016-03-15
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    相关资源
    最近更新 更多