Divné chování file.read() a re.sub() – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Divné chování file.read() a re.sub() – Python – Fórum – Programujte.comDivné chování file.read() a re.sub() – Python – Fórum – Programujte.com

 

9. 2. 2011   #1
-
0
-

Ahoj, píšu si takový menší projekt v pythonu a potřebuji nahrazovat obsah txt souboru pomocí regulárních výrazů. A tady je problém, chová se to nějak divně.

Například když chci (teď jen z testovacích důvodů) odstranit z obsahu souboru všechny bílé znaky:
soubor test.py:

# -*- coding: utf8 -*-

import os, sys, re

file = open('test.txt', 'r')
content = file.read()
file.close()

print re.sub(r'\s*', '', content, re.MULTILINE|re.DOTALL|re.UNICODE)

soubor test.txt:
; 

ahoj tady prográmator

ahoj tady prográmator
ahoj tady prográmator
ahoj tady prográmator
ahoj tady prográmator

ahoj tady prográmator
ahoj tady prográmator

výstup:
;ahojtadyprográmatorahojtadyprográmatorahojtadyprográmator 

ahoj tady prográmator
ahoj tady prográmator

ahoj tady prográmator
ahoj tady prográmator

Prostě náhrada se provede asi 10x (mezery a zalomení řádků) a zbytek obsahu to ignoruje. Oba soubory jsou v kódování utf-8. Už ten problém řeším od včerejška a nevím si s tím rady.

Děkuji za pomoc

Nahlásit jako SPAM
IP: 213.29.146.–
sputnikone+1
Věrný člen
9. 2. 2011   #2
-
0
-

To xxxObiWan : Zkus odstranit všechny nastavené flags

Nahlásit jako SPAM
IP: 147.251.201.–
9. 2. 2011   #3
-
0
-

No to jsem z toho jelen... Doopravdy to funguje, moc díky. Dokázal bys vysvětlit, proč ty přepínače (nebo jak se to nazývá v pythonu) udělaly takové problémy?

Nahlásit jako SPAM
IP: 213.29.146.–
sputnikone+1
Věrný člen
9. 2. 2011   #4
-
0
-

To xxxObiWan :



#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os, sys, re

file = open('test.txt', 'r')
content = file.read()
file.close()

print re.sub(r'\s*', '', content, flags=re.MULTILINE|re.DOTALL|re.UNICODE)

:smile1:

Nahlásit jako SPAM
IP: 147.251.201.–
9. 2. 2011   #5
-
0
-

To hodí chybu

sub() got an unexpected keyword argument `flags`

Jak jsem pochopil z http://forums.devshed.com/python-programming-11/string-match-and-replace-733417.html, tak flagy se dají používat jen v příkazu re.compile()

takže pokud to někomu pomůže, správně bez errorů je to takto:
# -*- coding: utf8 -*-

import os, sys, re

file = open('test.txt', 'r')
content = file.read()
file.close()

pattern = re.compile(r'\s*', flags=re.MULTILINE|re.DOTALL|re.UNICODE)
print re.sub(pattern, '', content)

Nahlásit jako SPAM
IP: 213.29.146.–
sputnikone+1
Věrný člen
9. 2. 2011   #6
-
0
-
Nahlásit jako SPAM
IP: 147.251.201.–
9. 2. 2011   #7
-
0
-

Měl bych mít 2.6, stahoval jsem jí tak před rokem, když jsem se v pythonu začal učit. Od té doby až do teď jsem na python ani nesáh :-D takže nevím, jestli se vyplatí stahovat si nějakou novější verzi.

Nahlásit jako SPAM
IP: 213.29.146.–
nervak0
Věrný člen
9. 2. 2011   #8
-
0
-

proč ty přepínače udělaly takové problémy?

Protože jsi je zadal jako count.

sub() got an unexpected keyword argument `flags`

re.sub() má parametr flags od verze 2.7.

správně bez errorů je to takto

Když už jsi se s těmi flagy potýkal, tak ses mohl podívat k čemu jsou.

Nahlásit jako SPAM
IP: 213.211.51.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 34 hostů

Podobná vlákna

Divné chování if-else — založil d.mostek

Divné chování polí — založil Seph

Fmod.. divne chovani?? — založil cp.Hook

Divné chování for cyklů — založil Blinder

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý