Emette i primi 100 caratteri in una stringa


108

Può sembrare trovare una funzione di sottostringa in Python.

Diciamo che voglio produrre i primi 100 caratteri in una stringa, come posso farlo?

Voglio farlo anche in sicurezza, valutando che se la stringa è di 50 caratteri non dovrebbe fallire.


2
Il seguito a questa domanda è: Buon primer per la notazione slice in Python
Greg Hewgill

1
Cosa intendi con "personaggi"? Punti codice, cluster grafema o unità di codice? Il sezionamento conterà le unità di codice, che potrebbero non dare il risultato desiderato.
Philipp

Risposte:


168
print my_string[0:100]

5
funziona anche per stringhe più corte di 100, ad esempio print 'foo'[:100](nota che len('foo')è 3, quindi anche quando foo[100]non funziona, funziona)
Rodrigo Laguna

67

Dal tutorial di Python :

Gli indici di fetta degeneri vengono gestiti con garbo: un indice troppo grande viene sostituito dalla dimensione della stringa , un limite superiore più piccolo del limite inferiore restituisce una stringa vuota.

Quindi è sicuro da usare x[:100].



7

Per rispondere alla preoccupazione di Philipp (nei commenti), lo slicing funziona bene anche per le stringhe Unicode

>>> greek=u"αβγδεζηθικλμνξοπρςστυφχψω"
>>> print len(greek)
25
>>> print greek[:10]
αβγδεζηθικ

Se vuoi eseguire il codice sopra come uno script, metti questa riga in alto

# -*- coding: utf-8 -*-

Se il tuo editor non salva in utf-8, sostituisci la codifica corretta


2
Non denigrando la tua risposta, ma c'è solo 24 lettere in greco, ςe σsono la stessa lettera :-)
paxdiablo

4
@paxdiablo, doh! Li ho copiati dalla pagina di wikipedia. Per fortuna non ho chiamato la variabile greek_alphabetallora :)
John La Rooy

4

Il taglio degli array è fatto con [first:last+1].

Un trucco che tendo a usare molto è indicare informazioni aggiuntive con i puntini di sospensione. Quindi, se il tuo campo è di cento caratteri, userei:

if len(s) <= 100:
    print s
else:
    print "%s..."%(s[:97])

E sì, lo so che ()in questo caso è superfluo per l' %operatore di formattazione, è solo il mio stile.


Immagino che questo fosse inteso come spunto di riflessione, ma nel caso dell'OP probabilmente non suggerirei di farlo. Il risultato sarebbe una stringa che dovresti controllare per il contenuto da tagliare ulteriormente o qualcosa del genere. In questo caso, immagino che si desideri che quel numero sia variabile e che il risultato sia sempre corretto, o che il numero sia corretto e la manipolazione produca qualcosa di significativo, o l'errore o ritorni con grazia in caso di fallimento. Non riesco a pensare a molti casi, oltre a fornire informazioni leggibili dall'uomo, in cui vorrei aggiungere del testo arbitrariamente a una stringa.

3

La maggior parte degli esempi precedenti solleverà un'eccezione nel caso in cui la stringa non sia abbastanza lunga.

Un altro approccio è usare 'yourstring'.ljust(100)[:100].strip().

Questo ti darà i primi 100 caratteri. Potresti ottenere una stringa più breve nel caso in cui gli ultimi caratteri della stringa siano spazi.


Grazie. Strano perché le migliori risposte su stackoverflow non vengono riconosciute e votate facilmente.
Basil Musa

3

La formattazione delle stringhe utilizzando %è un ottimo modo per gestirlo. Ecco alcuni esempi.

Il codice di formattazione viene '%s'convertito '12345'in una stringa, ma è già una stringa.

>>> '%s' % '12345'

'12345'

'%.3s' specifica di utilizzare solo i primi tre caratteri.

>>> '%.3s' % '12345'

'123'

'%.7s'dice di usare i primi sette caratteri, ma sono solo cinque. Nessun problema.

>>> '%.7s' % '12345'

'12345'

'%7s' utilizza fino a sette caratteri, riempiendo i caratteri mancanti con spazi a sinistra.

>>> '%7s' % '12345'

'  12345'

'%-7s' è la stessa cosa, tranne riempire i caratteri mancanti a destra.

>>> '%-7s' % '12345'

'12345  '

'%5.3' dice usa i primi tre caratteri, ma riempilo con spazi a sinistra per un totale di cinque caratteri.

>>> '%5.3s' % '12345'

'  123'

Stessa cosa tranne il riempimento a destra.

>>> '%-5.3s' % '12345'

'123  '

Può gestire anche più argomenti!

>>> 'do u no %-4.3sda%3.2s wae' % ('12345', 6789)

'do u no 123 da 67 wae'

Se hai bisogno di ancora più flessibilità, str.format()è disponibile anche. Ecco la documentazione per entrambi.


0
[start:stop:step]

Quindi, se vuoi prendere solo 100 primi caratteri, usa your_string[0:100]o your_string[:100] Se vuoi prendere solo il carattere in posizione pari, usa your_string[::2] I "valori predefiniti" per l'inizio è 0, per stop - len della stringa, e per il passo - 1. Quindi quando non ne fornisci uno e metti ':', lo userà come valore predefinito.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.