Tenho um arquivo de texto com cinco linhas. Abro e leio as linhas em um array e, em seguida, imprimo o array com sucesso, mas quando imprimo um único item do array, ele imprime caracteres individuais. Preciso usar as cinco linhas de entrada como strings individuais no código.
#!/usr/bin/python3
# read the configuration file (from setup.py)
try:
f = open('interface.txt', encoding="utf-8")
vars = f.read()
f.close()
except IOError:
print("oops cant open interface.txt")
exit ()
# debug
print ('\nthis works prints five items\n')
print (vars)
print ('\nthis prints every individual character in the file\n')
for xx in vars:
print (xx)
saída:
jbh@junkbox-2:~/Desktop/Athens/Volume1/Chapter00$ ./readInterface.py
this works prints five items
Chapter 00 - Introduction
index.html
../Chapter10/index.html
../Chapter01/index.html
Chapter00.csv
this prints every individual character in the file
C
h
a
p
t
e
r
0
0
-
I
n
t
r
o
d
u
c
t
i
o
n
-- etc. ---
No seu código,
vars
obtém o valor aqui:Isso lê todo o conteúdo do arquivo, incluindo terminações de linha, como um único valor do tipo string.
Você pode imprimir essa string com:
E isso imprime o texto como você o encontra no arquivo, com terminações de linha e tudo.
Quando você faz isso:
Você está percorrendo o conteúdo de uma string, que é apenas uma sequência iterável de caracteres. Então,
xx
pega o valor desses caracteres um por um, e é por isso que você os vê impressos um de cada vez.Se você quiser iterar sobre as linhas, você deve dividir a string em linhas sobre as terminações de linha:
Ou, de preferência, leia o arquivo como linhas para começar:
É bom que você esteja seguro com o arquivo e o feche, mas ainda melhor seria:
Usando
with
, você tem a garantia de que o arquivo será fechado. E, ao passar1
para ,exit()
você garante que o programa será encerrado com um código de saída 1, que informa a qualquer pessoa que chamar o aplicativo de outro lugar que o processo não foi encerrado com sucesso.