'u yinelemek için dizgiyi int için forma dönüştürün int işlevini şu anda sahip olduğu dizelerin tuple'lerine eşlemek zorunda değilim.python csv reader -
import os
import csv
filepath = os.path.normpath("c:/temp/test.csv")
individualFile = open(filepath,'rb')
dialect = csv.Sniffer().sniff(individualFile.read(1000))
individualFile.seek(0)
reader = csv.reader(individualFile,dialect)
names = reader.next()
print names
def buildTree(arityList):
if arityList == []:
return 0
else:
tree = {}
for i in xrange(arityList[0][0],arityList[0][1]+1):
tree[i] = buildTree(arityList[1:])
return tree
census = buildTree([(1,12),(1,6),(1,4),(1,2),(0,85),(0,14)])
for m, f, s, g, a, c, t in reader:
try:
m,f,s,g,a,c,t = map(int,(m,f,s,g,a,c,t))
census[m][f][s][g][a][c] += t
except:
print "error"
print m, f, s, g, a, c, t
break
Ne yapmak istiyorum böyle bir şeydir: Benim örnek son bölümünü görün
for m, f, s, g, a, c, t in map(int,reader):
try:
census[m][f][s][g][a][c] += t
except:
print "error"
print m, f, s, g, a, c, t
break
Bunu denemek ve aşağıdaki hatayı alıyorum:
TypeError: int() argument must be a string or a number, not 'list'
ben Sorun yaşıyorum bu hata mesajını anlıyorum. Okuyucunun yinelenen bir nesne olduğunu düşündüm - bir liste değil. Her yineleme için bir liste döndürür, ancak kendisi bir liste değildir, doğru mu? Sanırım bu daha çok bir yan soru. Gerçekten bilmek istediğim, yapmaya çalıştığım şeyi yapmanın bir yolu varsa. Gerçekten alakalı olmayan kod için üzgünüm, ama bütün örneğimi içerebileceğimi düşündüm. Parçalara ayırmaktan çekinmeyin! :) Anahtarın, bu iç içe geçmiş sözlük parçaları yerine bir tuple olduğu bir dict'ın olması daha iyi olabilir mi diye merak ediyorum, ama yine de, sorumu bulmakla ilgileniyorum.
reader = csv.reader(individualFile,dialect)
reader = int_wrapper(reader)
# all that other stuff
for m, f, s, g, a, c, t in reader:
try:
census[m][f][s][g][a][c] += t
except:
print "error"
print m, f, s, g, a, c, t
break
Bu sadece okuyucuyu sarmak ve tamsayılar girdi dönüştürmek için bir jeneratör işlevini kullanmaktır: gibi
def int_wrapper(reader):
for v in reader:
yield map(int, v)
Kodunuz sonra görünecektir:
bu harika. Sadece jeneratörler hakkında bir şeyler okuyordum ve bu da onları daha iyi anlamama yardımcı oluyor! toplam noob/fanboy gibi davrandığım için üzgünüm, ama python'a girmeye başlıyorum ve bu çok harika. – oob
@oob. Terleme. Alabildiğim tüm hayranları kullanabilirim. Oh bekle .... python hakkında konuşuyordun. Evet, pitonlar da oldukça havalı. – aaronasterling