【问题标题】:Problem to pass csv file into a function in Python将csv文件传递给Python中的函数的问题
【发布时间】:2019-12-09 07:22:35
【问题描述】:

我终于为一个我无法完成的小项目寻求帮助。

我在 Linux Ubuntu 16.04 和 Python 2.7.12 或 Python 3.5.2 上工作

这很简单:

我有一个包含数千个这种格式的比特币地址的 csv 文件:

12xApR3LKKobfMtPyorsyfpdQt51C1242P
1MqadAMYmwqvJPEYR5UhWHGhupuiXdQ5Pg
1P66WyUGcuPGTKH1ECwmrXoASPR1WP5dfa
1LWb1YtSoQ7m8RreJAEyasHK61jsQqMHGD
1BZnbtBXAKtjrA1suinXrf1s6pjhjPA7oG
166goQjUX3Lh3aN9SEXgcRwpPSBoJWtdDu
1C3pvanq8ZHDGrjfxQU7x8D13DS7d9XjLF

我想使用这个确实有效的函数将它们转换为 HASH160:

adr160 = base58.b58decode_check(adr58).encode('hex')[2:]

并将结果以相同格式写入另一个文本或 csv 文件。

88374DB2A14DEA2925B19AF4D4AD84EB94FDE409
156732EBD650DF4AC212F5C8DE5DFBA4AE588B59
E4928C9EFDE55B17603D9539FB649D9457C293EB
...

我尝试了很多事情,但每次都出现问题阻止我成功。

这是我最后的两次尝试:

import base58
import csv

adr58 =''

with open('sample.csv', 'rb') as csvfile: 
    adr58 = csv.reader(csvfile)
    adr160 = base58.b58decode_check(adr58).encode('hex')[2:]

with open("Output.txt", "a+") as text_file:
    text_file.write(adr160)

结果:

" AttributeError: '_csv.reader' object has no attribute 'rstrip' "

第二次尝试是:

import base58
import pandas as pd

adr58 = pd.read_csv('sample.csv')


def convert(adr58):
    print ("the address is: ")
    adr160 = base58.b58decode_check(adr58).encode('hex')[2:]

    f = open("hashed.txt", "w")
    f.write(adr160)
    f.close()

convert(adr58)

结果:

" AttributeError: 'DataFrame' object has no attribute 'rstrip' "

我怎样才能以简单的方式做到这一点?我在这里完全不知所措。

提前感谢你们的帮助。

【问题讨论】:

  • 在这两种情况下,您都试图对对象本身进行操作,而不是对对象中包含的字符串进行操作。请参阅csvreader() 文档中的示例:“返回一个读取器对象,它将遍历给定 csvfile 中的行”。在第一种情况下,您需要使用像for row in adr58 : 这样的迭代,对于第二种情况,您需要使用df.apply()df.iterrows()
  • 你是对的。我试图对对象本身进行操作。只需快速阅读您推荐的文档部分,我的代码现在就可以工作了。非常感谢。

标签: python pandas csv base58


【解决方案1】:

您必须遍历 DataFrame 的每行值,而不是 DataFrame 本身:

import base58
import pandas as pd

df= pd.read_csv('sample.csv')



def convert(adr58):
    adr58_list = []
    for i in range(len(df)):
        print ("the address is: ", df.iloc[:,i])
        adr58_list.append(base58.b58decode_check(df.iloc[:,i]).encode('hex')[2:])

    odf = pd.DataFrame()
    odf['column_name'] = adr58_list
    odf.to_csv('hashed.csv', index = False)

convert(df)

【讨论】:

    猜你喜欢
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    • 2021-02-15
    相关资源
    最近更新 更多