5

Quiero crear una variable de "nombre de archivo completo" de varias otras variables, pero las operaciones de concatenación de cadenas y cadenas de caracteres no se comportan de la manera esperada.Python 3.2 - Concatenar y el comportamiento de formato de cadena no se comportan como se esperaba

Mi código es el siguiente:

file_date = str(input("Enter file date: ")) 

root_folder = "\\\\SERVER\\FOLDER\\" 
file_prefix = "sample_file_" 
file_extension = ".txt" 

print("") 
print("Full file name with concatenation: ") 
print(root_folder + file_prefix + file_date + file_extension) 
print("Full file name with concatenation, without file_extension: ") 
print(root_folder + file_prefix + file_date) 
print("") 

print("") 
print("Full file name with string formatting: ") 
print("%s%s%s%s" % (root_folder, file_prefix, file_date, file_extension)) 
print("Full file name with string formatting, without file_extension: ") 
print("%s%s%s" % (root_folder, file_prefix, file_date)) 
print("") 

La salida al ejecutar la secuencia de comandos es:

C:\Temp>python test.py 
Enter file date: QT1 

Full file name with concatenation: 
.txtRVER\FOLDER\sample_file_QT1 
Full file name with concatenation, without file_extension: 
\\SERVER\FOLDER\sample_file_QT1 


Full file name with string formatting: 
.txtRVER\FOLDER\sample_file_QT1 
Full file name with string formatting, without file_extension: 
\\SERVER\FOLDER\sample_file_QT1 

que estaba esperando para concatenar el ".txt" al final, excepto que es reemplazando los primeros cuatro caracteres de la cadena con él en su lugar.

¿Cómo concateno la variable de extensión al final de la cadena en lugar de reemplazar los primeros n caracteres de la cadena?

Además de cómo resolver este problema en particular, me gustaría saber por qué me topé con él en primer lugar. ¿Qué hice mal/de qué comportamiento de Python 3.2 no soy consciente?

Respuesta

8

creo que la entrada método utilizado en su ejemplo, así:

file_date = str(input("Enter file date: ")) 

podría estar regresando un carácter de retorno de carro al final.
Esto hace que el cursor vuelva al inicio de la línea cuando intenta imprimirlo. Es posible que desee recortar el valor de retorno de la entrada().

+0

confirmado. Después de ejecutar el código del OP, 'repr (file_date)' es ''QT1 \ r'' –

+0

. Tenía la sensación de que era algo así de simple. Estaba agregando un retorno de carro "\ r" en lugar de un salto de línea, pero me ayudaste a orientarme en la dirección correcta. ¡Gracias! – tgxiii

+3

En Python 3, la entrada devuelve una cadena, por lo que no es necesario usar str. – MRAB

3

Utilice esta línea en lugar de deshacerse de la línea de alimentación:

file_date = str(input("Enter file date: ")).rstrip() 
Cuestiones relacionadas