2014-11-12 15 views
6

mam poniższe dane .. Gdzie można zobaczyć przestrzenie między 2 linii na początku i bez spacji pomiędzy nimi niektórych innych liniach:tylko linie łączenia ze spacjami w Pythonie

Report Area 

Total Population 

Total Land Area 
(Square Miles) 

Population Density 
(Per Square Mile) 


Report Area 37,325,068 155,738.02 239.67 
Alameda County, CA 1,515,136 738.82 2,050.75 
Alpine County, CA 1,197 738.13 1.62 
Amador County, CA 37,764 594.43 63.53 
Butte County, CA 220,101 1,636.03 134.53 
Calaveras County, CA 45,507 1,019.74 44.63 
Colusa County, CA 21,329 1,150.43 18.54 

muszę ostateczną wyjście jako to:

Report Area Total Population Total Land Area(Square Miles) Population Density(Per Square Mile) 

Report Area 37,325,068 155,738.02 239.67 
Alameda County, CA 1,515,136 738.82 2,050.75 
Alpine County, CA 1,197 738.13 1.62 
Amador County, CA 37,764 594.43 63.53 
Butte County, CA 220,101 1,636.03 134.53 
Calaveras County, CA 45,507 1,019.74 44.63 
Colusa County, CA 21,329 1,150.43 18.54 

próbowałem, używając output = " ".join(line.strip() for line in f) ale nie robi praca jak trzeba.

to moje wyjście:

Report Area Total Population Total Land Area (Square Miles) Population Density (Per Square Mile) Report Area 37,325,068 155,738.02 239.67 Alameda County, CA 1,515,136 738.82 2,050.75 Alpine County, CA 1,197 738.13 1.62 Amador County, CA 37,764 594.43 63.53 

wszystkie linie w jednej linii ..

+0

Wydaje mi się, że poprawnie poprawiłem formatowanie. Nie miałem jednak pewności co do ostatecznego wyniku. Sprawdź, czy moja edycja jest prawidłowa. Jeśli nie, dostosuj go w razie potrzeby. – Andy

+1

masz rację Andy ... to jest to, w jaki sposób chcę moje wyjście .. Dzięki za edycję ..;) –

+0

Nie jest jasne, o co prosisz. –

Odpowiedz

1
import re 
p = re.compile(ur'\n\n|\n(?=[^\n]*\n\n)', re.IGNORECASE) 
test_str = u"Report Area\n\nTotal Population\n\nTotal Land Area\n(Square Miles)\n\nPopulation Density \n(Per Square Mile)\n\n\nReport Area 37,325,068 155,738.02 239.67 \nAlameda County, CA 1,515,136 738.82 2,050.75 \nAlpine County, CA 1,197 738.13 1.62 \nAmador County, CA 37,764 594.43 63.53 \nButte County, CA 220,101 1,636.03 134.53 \nCalaveras County, CA 45,507 1,019.74 44.63 \nColusa County, CA 21,329 1,150.43 18.54 " 
subst = u" " 

result = re.sub(p, subst, test_str) 

Można spróbować poprzez re.

+1

nie działa. Mimo że nie mogę dać test_str dla każdej linii, ponieważ mam wiele takich plików .. –

+0

@PavanChakravarthy musisz tylko czytać pliki jeden po drugim. zawartość pliku w jednym ciągu przez 'f.read' i przekaż go do' re'. Działa tutaj: http://regex101.com/r/tF5fT5/44 – vks

1

Korzystanie warunkową listowych:

output = os.linesep.join(line for line in f if " " in line) 
+0

Rewizja, ale powinieneś wyjaśnić, co to jest 'os.linesep'. – itsadok

+1

to nie działa, a spacja jest dodawana pomiędzy liniami. –