我有一个csv文件,该文件包含两列数据,如下所示:
以此类推...
我想将每个数据转换为等效的十六进制,然后将它们连接起来,然后将它们写入另一个csv文件中的列中。
例如:hex(40500)= 9E34,hex(38921)= 9809。 因此,在输出的csv文件中,元素A1为9E349809
因此,我期望输出csv文件中的列A为:
我引用了一个示例代码,该代码将两列连接起来,但是在将它们转换为十六进制然后进行连接方面很费力。以下是代码:-
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)
我怎样才能将每一列中的数据转换为其等效的十六进制,然后将它们连接起来并写入另一个文件中?
答案 0 :(得分:2)
您可以通过4个步骤进行操作:
从输入的csv
文件
使用格式选项获取每个数字的十六进制值
执行字符串串联以获得结果
写入新的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()]))