Sziasztok.
Életem első python-dolgait tanulom éppen és rájöttem, hogy ez bizony nem BASH.
Paraméternek mar át tudok adni stringet, és azt mar utána lehet kezelni. Most azt szeretnem, hogy fájlból olvasson és minden sort külön stringként kezeljen, külön névvel.
Eddig jutottam el:
root@logger:/usr/src/examples# cat olvasas.py
#!/bin/python
import sys,os
file='/logger'
job_id=os.path.join(file)
f=open(job_id,'r').readlines()
print f
root@logger:/usr/src/examples# cat /logger
2015febr7
root@logger:/usr/src/examples# python olvasas.py
['2015febr7\n']
root@logger:/usr/src/examples#
A problémám az, hogy amikor f-et kiírja, akkor azt így teszi:
['2015febr7\n']
és nem így:
2015febr7
Ez miért van?
Biztos valami őrületesen egyszerű dologról van szó...
- 2810 megtekintés
Hozzászólások
Pontositva igy tudom megfogalmazni BASHban:
f="`cat /logger | awk 'BEGIN {FS=" "}{print $1}'`"
echo $f
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
#!/usr/bin/python
fname='logger'
for s in open(fname, 'r').readlines():
s=s.rstrip() # sorvégi \n levágása
print s
- A hozzászóláshoz be kell jelentkezni
Igen, mukodik.
Koszonom szepen.
# furcsaltam, hogy a pithon meg a # jel utan sem szereti az ekezeteket. Erdekes.
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
Semmi érdekes nincs benne, nincs vele semmi baja.
Csak jelezni kell a file kódolását a scriptben. Érdemes utánanézni.
- A hozzászóláshoz be kell jelentkezni
Bzmg... A XXI. században gondot okoz (külön extra mókolás kell), ha nem 7 bites ASCII a komment/forráskód... Gratulálok.
- A hozzászóláshoz be kell jelentkezni
Hát ha már itt tartunk, elég szomorú hogy nem tért át a XXI. század 2. évtizedére se minden OS és minden szoftver UTF8-ra. Pedig 20 éve létezik.
- A hozzászóláshoz be kell jelentkezni
... vagy bármi másra, amit bárki más talált ki bármi más megfontolásból...
- A hozzászóláshoz be kell jelentkezni
A python3 sok téren lépett előre. Pl. ebben is:
https://docs.python.org/2/tutorial/interpreter.html#source-code-encoding
https://docs.python.org/3/tutorial/interpreter.html#source-code-encoding
--
♙♘♗♖♕♔
- A hozzászóláshoz be kell jelentkezni
Hát, ha abból indulunk ki, hogy a Python olyan nyelv szeretne lenni, ami rendre nevel (hogy ez sikerült-e, azt ne firtassuk), akkor valahol logikus az, hogy megköveteli azt, hogy még a kommentnek is az legyen a kódolása, mint minden másnak. Fura, de valamennyire el tudom fogadni.
- A hozzászóláshoz be kell jelentkezni
Aki rendetlen, az ne kódoljon. Mert a forráskód kinézete a fejlesztés nem túl lényeges szelete: nagyobb projekteknél a kötelező formázási konvenciókat betartató formázó tool-on megy keresztül a forráskód, mielőtt a verziókezelőbe vissza lenne pakolva.
A változók, eljárások nevezéktana esetében például sokkal fontosabb, hogy rend legyen, hogy "szép", egységes legyen, erre ugyanis nem nagyon van automatizmus még :-P
- A hozzászóláshoz be kell jelentkezni
> aki rendetlen, ne kódoljon
Egyetértek, bővebbet inkább nem írok ;-)
- A hozzászóláshoz be kell jelentkezni
Viszont az egyszerűség, a kezdőbarátság is hol deklarált célként, hol pro tulajdonságként jelenik meg.
Mármost a fenti tükrében azt, hogy csórikám beírja a bármit azután a kommentjel után, ami a "Hogyan legyünk Python programozók 12 másodperc alatt?"-féle könyvek szerint éppen arra szolgál, hogy utána bármi beírható legyen, mire az egésznek a taknya-nyála egybefolyik... hát nem tom, én nehezen tudnám védeni egy csapatnyi középiskolás előtt.
- A hozzászóláshoz be kell jelentkezni
2008 óta van python3. Esetleg ideje lenne már nem a régivel szopatni a kezdőket.
--
♙♘♗♖♕♔
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni
Valamiért a nagy disztribútorok elég konzervatívkák maradtak az elmúlt közel 7 évben ezen a téren.
- A hozzászóláshoz be kell jelentkezni
valamiért ==> a 3.x inkompatibilis "másik python", helytelenül viszi a 2.x alá írt kódokat. Bár oda lehet már figyelni, mert a 2.6 illetve a 2.7 széria a váltást könnyítendő 99%-ban eszi a 3.x szintaktikát, így lehet már 99%-ban jó kódokat írni, tesztelve mindkettőn. Viszont nem figyelve 2.x szintaktikájú kóddal rendelkezhetünk, ami hibás eredményt adhat 3.x környezettel futtatva.
Nézzünk egy apró, ám fontos esetet: print 2.x-ben nyelvi elem, 3.x-ben függvény.
>>> print 5+2
2.x esetén oké, 3.x esetén hibába futunk a zárójelezés hiányában.
>>> print ("Osszeg:", 5+2)
python 3.4: "Osszeg: 7" --> string
python 2.7: ('Osszeg:', 7) --> tuple
- A hozzászóláshoz be kell jelentkezni
from __future__ import print_function
2.6 óta működik.
--
♙♘♗♖♕♔
- A hozzászóláshoz be kell jelentkezni
--> from __future__ import print_function
Ez tetszik! Gyorsan meg is kerestem.
https://docs.python.org/2/library/__future__.html
- division
- absolute_import
- print_function
- unicode_literals
A fenti 4 importálásával ténylegesen lehet python-2.6 .. 3.4 verziókon 100%-ban egységesen lefutó kódot írni?
- A hozzászóláshoz be kell jelentkezni
Általában ennél kicsit több kell. Itt összefoglalva olvasható, hogy mire kell még figyelni. A PyChess esetén ezek kellettek belőle.
--
♙♘♗♖♕♔
- A hozzászóláshoz be kell jelentkezni
Mindent, de tényleg MINDENT meg lehet oldani, körüljárni, eltakarni (valószínűleg sokunk fizetésében jelent nagy részt az erre való hajlandóság és képesség).
Kérdés, hogy az egész hogyan viszonyul a fenti felvetéshez, amely során csóringerkém életében először szembesül azzal, hogy ez a python nem is az a python, ez a komment nem is úgy komment.
(Disclaimer: amúgy szó nincs róla, hogy ne kedvelném a nyelvet, de itt a "seemed like a good idea at the time" szagát érzem.)
- A hozzászóláshoz be kell jelentkezni
Gondolom a python3 pont amiatt született, mert sok helyen már GvR se bírta tovább ezt a szagot :)
--
♙♘♗♖♕♔
- A hozzászóláshoz be kell jelentkezni
pl. egy ilyennel mondjuk a 3. sorban?
# -*- coding: utf-8 -*-
akkor ez hasonlit a latexhez, ott is kozolni kell a preambulumban hogy mit kell olvasnia.
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
Más nyelvek meg tudták oldani, hogy nem kell a szájába rágni, hogy vigyázzon, mert (oh, borzalom!) ékezetes, utf-1543125 vagy a jó ég tudja, milyen kódolású részek is vannak. Pláne kommentnél... Amit minden rendes előfeldolgozó nulladik körben kéne, hogy kihajítson, mindenféle beleolvasás és vakerálás nélkül.
- A hozzászóláshoz be kell jelentkezni
Az abszurd humor gyökerei köteleznek.
- A hozzászóláshoz be kell jelentkezni
A readlines EOF-ig az összes sort beolvassa egy listába, lásd: https://docs.python.org/2/library/stdtypes.html#file.readlines
Te a listát írod ki, aminek egy eleme van. Azt így írja ki a Python.
szerk.: felettem szebben megfogalmazták a megvalósítást.
--
blogom
- A hozzászóláshoz be kell jelentkezni
Az idézett dokumentációban kicsit feljebb meg még szebben. A lista se kell.
--
♙♘♗♖♕♔
- A hozzászóláshoz be kell jelentkezni
Azt hiszem kezdem erteni. Koszi.
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
És milyen szép lenne, ha a scripted ciklust, elágazást, meg ilyesmiket is tartalmazna, és ugyanilyen módon (sor eleji whitespace kiszórva) lenne megjelenítve... :-P
- A hozzászóláshoz be kell jelentkezni
Bizony.
Azonban a forraskod beillesztesekor a hup kirantja a sor eleji uresseget. Meg nem jottem ra miert. Pedig regen sikerult.
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
Bizony, nagyon nehéz megjegyezni a [code]-ot...
- A hozzászóláshoz be kell jelentkezni
nalam az nem ment.
nemtom miert.
varjunk csak..
valami
valami
valami
valami
ha ezek jol irodtak, akkor huje vagyok.
ha egy oszlopba, akkor ketsegeim vannak.
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
igen, huje vagyok..
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
ezzel okosabb lettem.
Azert irhatom pontos j-vel ugye?
Ha mar a korisme kozismert..
- A hozzászóláshoz be kell jelentkezni
Használhatsz pastebin-t is.
- A hozzászóláshoz be kell jelentkezni
Mert a html-ben nem számít, a pájtonban meg nagyon is - mert a programnyelv maga kényszerítse ki a "szépen formázott" forrást, mondta valaki valamikor... És úgy lett... :-P
- A hozzászóláshoz be kell jelentkezni
Azért a nyitott fájlt illik becsukni, ahogy illik nem feltételezni, hogy a teljes fájl egy nyeletre befér a memóriába:
#!/usr/bin/env python3
#-*- coding: utf-8 -*-
import sys
def main(fname):
with open(fname) as lines:
for line in lines:
sys.stdout.write(line)
if __name__ == '__main__':
main('/etc/fstab')
- A hozzászóláshoz be kell jelentkezni