ValueError: inválido literal para int () con la base 10: '.DS_Store'

votos
-1

Estoy trabajando en la implementación de un programa que me dará el resultado del índice invertido posicional de un archivo XML. En primer lugar tengo que cambiar el tipo de número de secuencia a int con el fin de utilizarlo más adelante.

Algunos de mi código es el siguiente:

def index(document_directory, dictionary_file, postings_file):
    # preprocess docID list

        docID_list = [int(docID_string) for docID_string in os.listdir(document_directory)]
        docID_list.sort()
        stemmer = PorterStemmer()
        stopwords = nltk.corpus.stopwords.words('english')
        # stopwords = set(stopwords.words('english'))
        docs_indexed = 0    # counter for the number of docs indexed
        dictionary = {}     # key: term, value: docIDs containing term (incudes repeats)
            # for each document in corpus
        for docID in docID_list:
                if (LIMIT and docs_indexed == LIMIT): break
.
.
.
.
.
            # open files for writing   
        dict_file = codecs.open(dictionary_file, 'w', encoding='utf-8')
        post_file = open(postings_file, 'wb')
.
.
.
.
            # close files
        dict_file.close()
        post_file.close()    
.
.
.
.


prints the proper command usage

def print_usage():
    print (usage:  + sys.argv[0] + -i directory-of-documents -d dictionary-file -p postings-file)

.
.
.
if (RECORD_TIME): start = timeit.default_timer()                              # start time
index(document_directory, dictionary_file, postings_file)   # call the indexer
if (RECORD_TIME): stop = timeit.default_timer()                               # stop time
if (RECORD_TIME): print ('Indexing time:' + str(stop - start))                # print time taken

Ahora en que funciono con el comando:

$ Pitón def_ind.py -i ./index/ -d output1111.txt -p output222.txt

Obtuve el siguiente error:

Traceback (most recent call last):
  File def_ind.py, line 161, in <module>
    index(document_directory, dictionary_file, postings_file)   # call the indexer
  File def_ind.py, line 36, in index
    docID_list = [int(docID_string) for docID_string in os.listdir(document_directory)]
  File def_ind.py, line 36, in <listcomp>
    docID_list = [int(docID_string) for docID_string in os.listdir(document_directory)]
ValueError: invalid literal for int() with base 10: '.DS_Store'

Tengo entendido que hay una cadena que no puede ser int, pero no sabía cómo? Lo que tengo que hacer aquí?

Estoy tratando de obtener una salida que comprobará cada palabra cuántas veces aparecieron en cada número de documento y en qué línea. por ejemplo: (número de documento: número de línea donde la palabra encontrado)

  and:
    2: 5,7
    5: 5

flower:
    1: 8
    2: 4,6,8
    3: 6
    4: 6
    5: 6

instantáneas de mi archivo xml:

    <DOCNO>1</DOCNO>
    <PROFILE>_AN-BENBQAD8FT</PROFILE>
    <DATE>910514
    </DATE>
    <HEADLINE>
    FT  14 MAY 91 / (CORRECTED) Jubilee of a jet that did what it was designed
    to do
    </HEADLINE>
    <TEXT>
       words, words, words
    </TEXT>
    <PUB>The Financial Times
    </PUB>
    <PAGE>
    London Page 7 Photograph (Omitted).
    </PAGE>
    </DOC>`

Estoy usando Python 3.7.

Nota: me encontré con muchas preguntas con el mismo error, pero no de ellos adaptado mi situación.

Publicado el 20/10/2018 a las 10:29
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
0

La función os.listdir()devuelve los nombres de los archivos en ese directorio en particular.

Como dice su error, que está tratando de emitir estos nombres a números enteros. Esa es la causa de su error, en esta línea:

docID_list = [int(docID_string) for docID_string in os.listdir(document_directory)]

El código que ha pegado es un desastre (tal vez es simplemente incorrecto sangría después de pegar a stackoverflow); No puedo entender lo que está tratando de acomplish allí. Por lo que yo puedo ver, que en realidad nunca utiliza los valores de la lista docID_list, que acaba de iterar sobre ella. Así que ¿por qué incluso lanzando a los valores int?

Respondida el 20/10/2018 a las 11:27
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more