从csv文件的两列转换和连接数据

时间:2019-01-21 16:22:12

标签: python-3.x

我有一个csv文件,该文件包含两列数据,如下所示:

  1. 40500 38921
  2. 43782 32768
  3. 55136 49651
  4. 63451 60669
  5. 50550 36700
  6. 61651 34321

以此类推...

我想将每个数据转换为等效的十六进制,然后将它们连接起来,然后将它们写入另一个csv文件中的列中。

例如:hex(40500)= 9E34,hex(38921)= 9809。 因此,在输出的csv文件中,元素A1为9E349809

因此,我期望输出csv文件中的列A为:

  1. 9E349809
  2. AB068000
  3. D760C1F3
  4. F7DBECFD
  5. C5768F5C
  6. F0D38611

我引用了一个示例代码,该代码将两列连接起来,但是在将它们转换为十六进制然后进行连接方面很费力。以下是代码:-

import csv

inputFile = 'input.csv'
outputFile = 'output.csv'

with open(inputFile) as f:
    reader = csv.reader(f)
    with open(outputFile, 'w') as g:
        writer = csv.writer(g)
        for row in reader:
            new_row = [''.join([row[0], row[1]])] + row[2:]
            writer.writerow(new_row)

我怎样才能将每一列中的数据转换为其等效的十六进制,然后将它们连接起来并写入另一个文件中?

2 个答案:

答案 0 :(得分:2)

您可以通过4个步骤进行操作:

  1. 从输入的csv文件

  2. 中读取行
  3. 使用格式选项获取每个数字的十六进制值

  4. 执行字符串串联以获得结果

  5. 写入新的csv 文件。

示例代码:

with open (outputFile, 'w') as outfile:
    with open (inputFile,'r') as infile:
        for line in infile:             # Iterate through each line
            left, right = int(line.split()[0]), int(line.split()[1]) # split left and right blocks
            newstr = '{:x}'.format(left)+'{:x}'.format(right) # create new string using hex values excluding '0x'
            outfile.write(newstr)   # write to output file
    print ('Conversion completed')
print ('Closing outputfile')

示例输出:

In[44] line = '40500 38921'
Out[50]: '9e349809'

答案 1 :(得分:2)

ParvBanks解决方案很好(清晰且功能完善),我将其简化如下:

with open (inputFile,'r') as infile, open (outputFile, 'w+') as outfile:
    for line in infile:
        outfile.write("".join(["{:x}".format(int(v)) for v in line.split()]))