TypeError: 시퀀스 항목 0: 필요한 문자열, int를 찾았습니다.
사전의 데이터를 데이터베이스에 삽입하려고 합니다.데이터 유형에 따라 값을 반복하여 포맷하고 싶습니다.사용하고 있는 코드의 일부를 다음에 나타냅니다.
def _db_inserts(dbinfo):
try:
rows = dbinfo['datarows']
for row in rows:
field_names = ",".join(["'{0}'".format(x) for x in row.keys()])
value_list = row.values()
for pos, value in enumerate(value_list):
if isinstance(value, str):
value_list[pos] = "'{0}'".format(value)
elif isinstance(value, datetime):
value_list[pos] = "'{0}'".format(value.strftime('%Y-%m-%d'))
values = ",".join(value_list)
sql = "INSERT INTO table_foobar ({0}) VALUES ({1})".format(field_names, values)
except Exception as e:
print 'BARFED with msg:',e
몇 가지 샘플 데이터를 사용하여 algo를 실행하면(아래 참조) 다음과 같은 오류가 나타납니다.
TypeError: 시퀀스 항목 0: 필요한 문자열, int를 찾았습니다.
위의 오류를 나타내는 value_list 데이터의 예를 다음에 나타냅니다.
value_list = [377, -99999, -99999, 'f', -99999, -99999, -99999, 1108.0999999999999, 0, 'f', -99999, 0, 'f', -99999, 'f', -99999, 1108.0999999999999, -99999, 'f', -99999, 'f', -99999, 'f', 'f', 0, 1108.0999999999999, -99999, -99999, 'f', 'f', 'f', -99999, 'f', '1984-04-02', -99999, 'f', -99999, 'f', 1108.0999999999999]
내가 뭘 잘못하고 있지?
string.join
는 ints가 아닌 문자열 목록 내의 요소를 연결합니다.
대신 다음 생성기 식을 사용하십시오.
values = ','.join(str(v) for v in value_list)
주어진 목록 이해/제너레이터 식 답변은 괜찮지만, 저는 이것이 읽고 이해하기 쉽다고 생각합니다.
values = ','.join(map(str, value_list))
교체하다
values = ",".join(value_list)
와 함께
values = ','.join([str(i) for i in value_list])
또는
values = ','.join(str(value_list)[1:-1])
cval과 Priyank Patel의 답변은 훌륭하다.단, 일부 값은 Unicode 문자열일 수 있으므로,str
던지다UnicodeEncodeError
에러입니다.이 경우, 기능을 바꿉니다.str
함수로unicode
.
예를 들어, 문자열 Libié(리비아의 경우 네덜란드어)는 Python에서 유니코드 문자열로 표현된다고 가정합니다.u'Libi\xeb'
:
print str(u'Libi\xeb')
는 다음 오류를 발생시킵니다.
Traceback (most recent call last):
File "/Users/tomasz/Python/MA-CIW-Scriptie/RecreateTweets.py", line 21, in <module>
print str(u'Libi\xeb')
UnicodeEncodeError: 'ascii' codec can't encode character u'\xeb' in position 4: ordinal not in range(128)
단, 다음 행은 오류를 발생시키지 않습니다.
print unicode(u'Libi\xeb') # prints Libië
대체 순서:
values = ','.join([str(i) for i in value_list])
타고
values = ','.join([unicode(i) for i in value_list])
안전하기 위해서.
문자열 보간은 형식화된 문자열로 전달하기 위한 좋은 방법입니다.
values = ', '.join('$%s' % v for v in value_list)
먼저 정수 데이터 프레임을 문자열로 변환한 다음 작업을 수행할 수 있습니다.
df3['nID']=df3['nID'].astype(str)
grp = df3.groupby('userID')['nID'].aggregate(lambda x: '->'.join(tuple(x)))
솔루션:
email = ''.join([str(nip), settings.ORGANISATION_EMAIL_SUFFIX])
목록 내의 요소가 문자열 형식이 아닙니다.이 경우 먼저 문자열로 변환한 후 다음과 같이 해당 목록에 join 작업을 적용할 수 있습니다.
summary = [ str(i) for i in summary ]
summery = " ".join(summary)
언급URL : https://stackoverflow.com/questions/10880813/typeerror-sequence-item-0-expected-string-int-found
'programing' 카테고리의 다른 글
위치 설정: 고정 동작과 같은 고정 동작(Vue2의 경우) (0) | 2022.11.29 |
---|---|
PHP에서 에코와 인쇄는 어떻게 다릅니까? (0) | 2022.11.29 |
PHP/MySQL에서 날짜/시간을 UTC로 저장 (0) | 2022.11.20 |
pom.xml 행 1에 알 수 없는 오류가 표시되는 이유는 무엇입니까? (0) | 2022.11.20 |
orderBy Angular의 여러 필드별 (0) | 2022.11.20 |