Nos problémába ütköztem, természetesen Windows-os környezet miatt...
De lényegtelen is, a problémát meg kell oldani. Néztem már Google barátommal is okosságokat és a python doksit is nyálazgattam, de nem találok megoldást a problémámra.
Adott egy ascii kódolással írt txt file. Ebben megtalálható soronként egy - a base64-es kódolással átkódolt - képnek a kódja, plusz a fájl végén hozzászúrva ";" után az eredeti fájl neve. Linuxon megy gond nélkül oda-vissza, de mikor Windowson kipróbáltam a kódolt txt-t visszalakítani képpé akkor elhasal a következővel:
1) Add meg a forrasfajl tipusat (kep/szoveg): szoveg
2) Add meg a forrasfajl/konyvtar eleresi utjat: C:\xd.txt
3) Add meg az atkodolt fajl mentesi utjat: c:\
Traceback (most recent call last):
File "E:\python3\base64coder3.py", line 127, in
szoveges_feldolgozas(bekert_adatok)
File "E:\python3\base64coder3.py", line 117, in szoveges_feldolgozas
with open(celfajl, 'wb') as file:
OSError: [Errno 22] Invalid argument: 'c:\\left_align_png.png\n'
A kódrészlet ahol a hibát mondja:
def szoveges_feldolgozas(bekert_adatok):
'''
Szoveges fajl eseten ez a feldolgozo fuggveny fut le.
'''
forrasfajl = os.path.split(bekert_adatok['forras'])[1]
with open(forrasfajl, 'r') as file:
kepek = file.readlines()
for kep in kepek:
kep, celfajl = kep.split(';')
celfajl = os.path.join(bekert_adatok['cel'], celfajl)
print(celfajl)
binaris_adat = base64.b64decode(bytes(kep.replace('\n', ''), encoding='ascii'))
with open(celfajl, 'wb') as file:
file.write(binaris_adat)
print('Visszakodolas kesz.')
Nos azt tudom, hogy a backslash miatt csinálja a fesztivált, de mivel itt nem működik a nyers szöveg létrehozása a
r'xyz_fajl.png'
formában, mivel változóból olvasom be a stringet, ezért kéne valami másik megoldás. A furcsa nekem talán az, hogy a beolvasáskor nem nyafog a backslash-ek miatt, tehát valószínűleg a txt-ből kiolvasott karaktersorozattal van problémája.
Másik dolog még: Linuxon a
\n
sem jelentkezik a fájlnév végén, de Win-en a txt-ben is és emiatt utána a fájlnévben is megjelenik mint az látható a hibaüzenet végén, annak ellenére hogy előtte
str.replace()
-el el van távolítva belőle a soremelés karakter.
Harmadik kérdés ami vonatkozik mindkét rendszerre, de inkább csak Win-en lehet vele találkozni: ha például szóközökkel rendelkező elérési utat adok meg, akkor azt ugye macskakörmözni kell. Viszont ekkor a program nem tudja értelmezni, az
os.path.isdir()/os.path.isfile()
ellenőrzésekor kivételt vált ki. Itt csak annyi lenne a kérdésem, hogy merre induljak el, a macskakörmök lecserélése és a szóközök levédése terén? Van erre függvény készen (eddig nem találtam) vagy pedig írjam meg magam?
Köszönöm a segítséget.