Zasadniczo proszę użytkownika o wprowadzenie ciągu tekstu do konsoli, ale ciąg jest bardzo długi i zawiera wiele znaków końca wiersza. W jaki sposób wziąłbym ciąg użytkownika i usunął wszystkie podziały wierszy, aby był pojedynczym wierszem tekstu. Moja metoda pozyskiwania struny jest bardzo prosta.
string = raw_input("Please enter string: ")
Czy istnieje inny sposób pobierania ciągu od użytkownika? Używam Pythona 2.7.4 na komputerze Mac.
PS Najwyraźniej jestem noobem, więc nawet jeśli rozwiązanie nie jest najbardziej wydajne, doceniłoby to, które używa najprostszej składni.
strip
usuwa białe znaki na początku i na końcu ciągu, a nie wewnątrz ciągu ...Odpowiedzi:
Jak wprowadza się znaki końca wiersza
raw_input
? Ale kiedy już masz ciąg z kilkoma znakami, których chcesz się pozbyć, tylkoreplace
ich.W powyższym przykładzie zamieniłem wszystkie spacje. Ciąg
'\n'
reprezentuje nowe linie. I\r
reprezentuje powroty karetki (jeśli jesteś w systemie Windows, możesz je dostać, a sekundareplace
zajmie się nimi za Ciebie!).gruntownie:
Zwróć również uwagę, że wywoływanie zmiennej jest złym pomysłem
string
, ponieważ zacienia to modułstring
. Inna nazwa chciałbym uniknąć, ale chciałbym użyć czasami:file
. Z tego samego powodu.źródło
\r
powrotach karetki. Próbowałem wszystkich metod usuwania,\n
ale nadal nie udało mi się uchwycić\r
postaci.string
, ale z podobnego powodu nie chcesz używać nazwy zmiennejstr
.\n
ale nie\r\n
.Możesz spróbować użyć zamiany ciągu:
źródło
Możesz podzielić ciąg bez argumentu separatora, który będzie traktował kolejne białe spacje jako pojedynczy separator (łącznie z nowymi liniami i tabulatorami). Następnie dołącz używając spacji:
https://docs.python.org/2/library/stdtypes.html#str.split
źródło
zaktualizowane na podstawie
Xbello
komentarza:czytaj więcej tutaj
źródło
rstrip("\r\n")
rstrip('\r\n')
nie był wystarczający i musiał iść z:my_string.rstrip('\r\n').replace('\n', ' ')
Inną opcją jest regex:
źródło
r'[\n\r]+'
a nawetr'\s+'
zastąpienie dowolnego białego znaku pojedynczą spacją.Metoda uwzględniająca
przyjmuje taki wieloliniowy ciąg, który może być niechlujny np
i tworzy ładny jednowierszowy ciąg
AKTUALIZACJA: Aby naprawić wiele znaków nowej linii powodujących zbędne spacje:
Działa to również w przypadku następujących
test_str = '\nhej ho \n aaa\r\n\n\n\n\n a\n '
źródło
Jeśli ktoś zdecyduje się skorzystać
replace
, powinieneś spróbowaćr'\n'
zamiast tego'\n'
źródło
r
("surowy literał ciągu"). Niestety nie mam pojęcia dlaczego)Problem z rstripem polega na tym, że nie działa we wszystkich przypadkach (jak sam widziałem kilka). Zamiast tego możesz użyć - text = text.replace ("\ n", "") to usunie całą nową linię \ n ze spacją.
Z góry dziękuję za wasze pozytywne opinie.
źródło