在Python中将csv文件传递到函数时出现问题
我终于为一个我无法完成的小项目寻求帮助了 我在Linux Ubuntu 16.04和Python 2.7.12或Python 3.5.2上工作 这很简单: 我有一个csv文件,其中包含该格式的数千个比特币地址:在Python中将csv文件传递到函数时出现问题,python,pandas,csv,base58,Python,Pandas,Csv,Base58,我终于为一个我无法完成的小项目寻求帮助了 我在Linux Ubuntu 16.04和Python 2.7.12或Python 3.5.2上工作 这很简单: 我有一个csv文件,其中包含该格式的数千个比特币地址: 12xApR3LKKobfMtPyorsyfpdQt51C1242P 1MqadAMYmwqvJPEYR5UhWHGhupuiXdQ5Pg 1P66WyUGcuPGTKH1ECwmrXoASPR1WP5dfa 1LWb1YtSoQ7m8RreJAEyasHK61jsQqMHGD 1BZn
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' "
我怎样才能用一种简单的方式做到这一点?我在这里完全不知所措
提前感谢大家的帮助。您必须循环数据帧每行的值,而不是数据帧本身:
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)
必须循环遍历数据帧的每行值,而不是在数据帧本身上:
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)
在这两种情况下,您都试图对对象本身进行操作,而不是对对象中包含的字符串进行操作。请参阅文档中的示例:“返回将在给定csvfile中的行上迭代的reader对象”。在第一种情况下,您需要对adr58中的行使用类似于
的迭代:
,在第二种情况下,您需要使用df.apply()
或df.iterrows()
您是对的。我试着对物体本身进行手术。只需快速阅读您推荐的文档部分,我的代码现在就可以使用了。非常感谢。在这两种情况下,您都试图对对象本身进行操作,而不是对对象中包含的字符串进行操作。请参阅文档中的示例:“返回将在给定csvfile中的行上迭代的reader对象”。在第一种情况下,您需要对adr58中的行使用类似于的迭代:
,在第二种情况下,您需要使用df.apply()
或df.iterrows()
您是对的。我试着对物体本身进行手术。只需快速阅读您推荐的文档部分,我的代码现在就可以使用了。非常感谢你。