Gato, grep y corte-traducido a python
linux bash (5)
quizás haya suficientes preguntas y / o soluciones para esto, pero no puedo evitarlo con esta pregunta: Tengo el siguiente comando que estoy usando en un script de bash
var=$(cat "$filename" | grep "something" | cut -d''"'' -f2)
Ahora, debido a algunos problemas, tengo que traducir todo el código a python. Nunca he usado python antes y no tengo la menor idea de cómo puedo hacer lo que hacen los comandos postet. ¿Alguna idea de cómo resolver eso con python?
En Python, sin dependencias externas, es algo como esto (no probado):
with open("filename") as origin:
for line in origin:
if not "something" in line:
continue
try:
print line.split(''"'')[1]
except IndexError:
print
Necesita un bucle sobre las líneas de un archivo, necesita aprender acerca de los métodos de cadena
with open(filename,''r'') as f:
for line in f.readlines():
# python can do regexes, but this is for s fixed string only
if "something" in line:
idx1 = line.find(''"'')
idx2 = line.find(''"'', idx1+1)
field = line[idx1+1:idx2-1]
print(field)
y necesitas un método para pasar el nombre del archivo a tu programa python y, mientras lo haces, quizás también la cadena para buscar ...
Para el futuro, trate de hacer preguntas más enfocadas si puede,
Necesitas tener un mejor entendimiento del lenguaje python y su biblioteca estándar para traducir la expresión
cat "$ filename" : lee el archivo cat "$filename"
y descarga el contenido a la salida estándar
|
: pipe redirige el stdout
del comando anterior y lo alimenta al stdin
del siguiente comando
grep "algo" : busca en la expresión regular something
archivo de datos de texto sin formato (si está especificado) o en la entrada estándar y devuelve las líneas correspondientes.
cut -d ''"'' -f2 : Divide la cadena con el delimitador específico e indexa / empalma campos particulares de la lista resultante
Equivalente Python
cat "$filename" | with open("$filename",''r'') as fin: | Read the file Sequentially
| for line in fin: |
-----------------------------------------------------------------------------------
grep ''something'' | import re | The python version returns
| line = re.findall(r''something'', line)[0] | a list of matches. We are only
| | interested in the zero group
-----------------------------------------------------------------------------------
cut -d''"'' -f2 | line = line.split(''"'')[1] | Splits the string and selects
| | the second field (which is
| | index 1 in python)
Combinatorio
import re
with open("filename") as origin_file:
for line in origin_file:
line = re.findall(r''something'', line)
if line:
line = line[0].split(''"'')[1]
print line
Para traducir el comando a python, consulte a continuación:
1) Alternativa de comando cat está abierta refiérase a esto . A continuación se muestra la muestra.
>>> f = open(''workfile'', ''r'')
>>> print f
2) Alternativa de comando grep refiera this
3) Alternativa de comando Cortar refiera this
necesitas usar el módulo os.system
para ejecutar el comando de shell
import os
os.system(''command'')
Si desea guardar la salida para su uso posterior, debe utilizar el módulo de subprocess
import subprocess
child = subprocess.Popen(''command'',stdout=subprocess.PIPE,shell=True)
output = child.communicate()[0]