Python'da yeni satır olmadan dosya okuma

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?

Çözüm

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 orun 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çinreadlines()` da tutar.

Not: readlines() ile simetri için writelines() yöntemi son satırları eklemez, bu nedenle f2.writelines(f.readlines()) f2de fnin tam bir kopyasını üretir.

Yorumlar (7)
temp = open(filename,'r').read().split('\n')
Yorumlar (10)
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;
Yorumlar (0)