Python - invalid syntax para impresion de lineas

 
Vista:

invalid syntax para impresion de lineas

Publicado por Pablo Suarez (4 intervenciones) el 21/11/2022 17:07:20
###########tengo este script de python para imprimir la primera linea del archivo con terminacion .gbk y las lineas con el caracter "product"

# input text file
inputFile = "c00617_NODE_61...region001.gbk"

# Enter the string
givenString = "product"


## the first line of the file
import linecache
particular_line1 = linecache.getline(inputFile, 1)

# Opening the given file in read-only mode
with open(inputFile, 'r') as filedata:

# Traverse in each line of the file

for line in filedata:

# Checking whether the given string is found in the line data

if givenString in line:

# Print the line, if the given string is found in the current line
print(particular_line1 + line)


#### el anterior script corre bien sin embargo cuando lo pongo el string de una sola linea para meterlo en loop de bash me marca error

python -c "import linecache; inputFile = 'c00617_NODE_61...region001.gbk'; givenString = 'product'; particular_line1 = linecache.getline(inputFile, 1); with open(inputFile, 'r') as filedata:; for line in filedata:; if givenString in line:; print(particular_line1 + line)"


### Me sale sintaxis invalida, no se que moverle, el error empieza desde que quiero abrir el archivo modo lectura (with open ...)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Francisco Javier
Val: 249
Ha aumentado su posición en 29 puestos en Python (en relación al último mes)
Gráfica de Python

invalid syntax para impresion de lineas

Publicado por Francisco Javier (313 intervenciones) el 21/11/2022 19:43:48
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import linecache
# input text file
inputFile = "c00617_NODE_61...region001.gbk"
# Enter the string
givenString = "product"
## the first line of the file
particular_line1 = linecache.getline(inputFile, 1)
# Opening the given file in read-only mode
filedata=open(inputFile, 'r')
# Traverse in each line of the file
for line in filedata:
    # Checking whether the given string is found in the line dat
    if givenString in line:
        # Print the line, if the given string is found in the current line
        print(particular_line1 + line)
filedata.close()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

invalid syntax para impresion de lineas

Publicado por Pablo (4 intervenciones) el 21/11/2022 19:56:22
Hola Francisco, muchas gracias por la respuesta, solo que cuando lo quiero correr en tipo one-liner me sale invalid syntax:

python -c "import linecache; inputFile = 'c00617_NODE_61...region001.gbk'; givenString = 'product'; particular_line1 = linecache.getline(inputFile, 1); with open(inputFile, 'r') as filedata; for line in filedata; if givenString in line: print(particular_line1 + line)"

Aquí no estoy haciendo bien la syntax desde el momento de abrir el archivo de lectura, no se si me podrías ayudar con esto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Francisco Javier
Val: 249
Ha aumentado su posición en 29 puestos en Python (en relación al último mes)
Gráfica de Python

invalid syntax para impresion de lineas

Publicado por Francisco Javier (313 intervenciones) el 21/11/2022 20:15:35
Buenas, a mi no, me da error. al principio me daba error por no cerrar con .close() pero luego me da bien.
1
2
3
4
5
6
7
8
9
10
11
12
# -*- coding: utf-8 -*-
#!/usr/bin/python
 
import linecache
inputFile = 'c00617_NODE_61...region001.gbk'
givenString = 'product'
particular_line1 = linecache.getline(inputFile, 1)
with open(inputFile, 'r') as filedata:
    for line in filedata:
        if givenString in line:
            print(particular_line1 + line)
filedata.close()

Si puedes envía el error que te da la consola
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

invalid syntax para impresion de lineas

Publicado por PABLO (4 intervenciones) el 21/11/2022 20:24:44
Ese esta bien, mi problema es que el script lo quiero pasar para ejecutar de una sola linea para poder correrlo en un loop de bash porque tengo varios archivos *.gbk:

Mi script:
python -c "import linecache; inputFile = 'c00617_NODE_61...region001.gbk'; givenString = 'product'; particular_line1 = linecache.getline(inputFile, 1); with open(inputFile, 'r') as filedata; for line in filedata: if givenString in line; print(particular_line1 + line)"

en este me marca
syntaxError: invalid syntax

lo que quiero es

for hist in *...region001.gbk
do
python -c "import linecache; inputFile = '$hist'; givenString = 'product'; particular_line1 = linecache.getline(inputFile, 1); with open(inputFile, 'r') as filedata; for line in filedata: if givenString in line; print(particular_line1 + line)"

done
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Francisco Javier
Val: 249
Ha aumentado su posición en 29 puestos en Python (en relación al último mes)
Gráfica de Python

invalid syntax para impresion de lineas

Publicado por Francisco Javier (313 intervenciones) el 22/11/2022 00:12:47
prueba a ver así:
me genera un
1
<generator object <genexpr> at 0x000002C813AA2040>
pero igual te sirve de ayuda, aunque esto sea anti pep8

1
import linecache;inputFile = 'f.gbk';givenString = 'product';particular_line1 = linecache.getline(inputFile, 1);print ((particular_line1 + line) for line in open(inputFile, 'r') if  givenString in line )
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

invalid syntax para impresion de lineas

Publicado por Pablo (4 intervenciones) el 22/11/2022 02:14:54
Hola Francisco

Pues he decido meterle un sys.argv[1]

#!/usr/bin/python
import sys # for sys.argv
import linecache

inputFile = sys.argv[1]
# Enter the string
givenString = "product"
#print('The following lines contain the string {', givenString, '}:')

#import linecache
particular_line1 = linecache.getline(inputFile, 1)

# Opening the given file in read-only mode
with open(inputFile, 'r') as filedata:

# Traverse in each line of the file

for line in filedata:

# Checking whether the given string is found in the line data

if givenString in line:

# Print the line, if the given string is found in the current line
print(particular_line1 + line)
# print(line)

# Closing the input file
filedata.close()


y de ahi un loop for

y ya

MUCHAS GRACIAS POR EL APOYO FRANCISCO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar