programing

TypeError: 시퀀스 항목 0: 필요한 문자열, int를 찾았습니다.

goodsources 2022. 11. 29. 21:47
반응형

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])

cvalPriyank 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

반응형