Python'da, çağırmak
temp = open(filename,'r').readlines()
her elemanı dosyadaki bir satır olan bir liste ile sonuçlanır. Biraz aptalca ama yine de: readlines()
aynı zamanda her elemana newline karakteri yazıyor ki bu olmasını istemediğim bir şey.
Bundan nasıl kaçınabilirim?
Tüm dosyayı okuyabilir ve str.splitlines
kullanarak satırları bölebilirsiniz:
temp = file.read().splitlines()
Ya da yeni satırı elle silebilirsiniz:
temp = [line[:-1] for line in file]
Not: bu son çözüm yalnızca dosya yeni satırla bitiyorsa çalışır, aksi takdirde son satır bir karakter kaybedecektir.
Bu varsayım çoğu durumda doğrudur (özellikle metin editörleri tarafından oluşturulan dosyalar için, ki bunlar genellikle son satır eklerler).
Bundan kaçınmak istiyorsanız dosyanın sonuna bir yeni satır ekleyebilirsiniz:
with open(the_file, 'r+') as f:
f.seek(-1, 2) # go at the end of the file
if f.read(1) != '\n':
# add missing newline if not already present
f.write('\n')
f.flush()
f.seek(0)
lines = [line[:-1] for line in f]
Ya da daha basit bir alternatif, bunun yerine satırbaşını strip
yapmaktır:
[line.rstrip('\n') for line in file]
Hatta oldukça okunaksız olmasına rağmen:
[line[:-(line[-1] == '\n') or len(line)+1] for line in file]
Bu da or
un geri dönüş değerinin bir boolean değil, doğru veya yanlış olarak değerlendirilen nesne olduğu gerçeğinden yararlanır.
Aslında readlines
yöntemi şuna eşdeğerdir:
def readlines(self):
lines = []
for line in iter(self.readline, ''):
lines.append(line)
return lines
# or equivalently
def readlines(self):
lines = []
while True:
line = self.readline()
if not line:
break
lines.append(line)
return lines
readline()satırsonunu tuttuğu için
readlines()` da tutar.
Not: readlines()
ile simetri için writelines()
yöntemi son satırları eklemez, bu nedenle f2.writelines(f.readlines())
f2
de f
nin tam bir kopyasını üretir.
def getText():
file=open("ex1.txt","r");
names=file.read().split("\n");
for x,word in enumerate(names):
if(len(word)>=20):
return 0;
print "length of ",word,"is over 20"
break;
if(x==20):
return 0;
break;
else:
return names;
def show(names):
for word in names:
len_set=len(set(word))
print word," ",len_set
for i in range(1):
names=getText();
if(names!=0):
show(names);
else:
break;