Python Hash没有在csv文件输出中更新

时间:2015-03-13 15:01:06

标签: python csv hash

我有一个工作代码,它接受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()

1 个答案:

答案 0 :(得分:3)

您正在创建 fixed bytestring 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)