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]
あるいは、もっと簡単な方法として、改行を strip することもできます。
[line.rstrip('\n') for line in file]
あるいは、かなり読めないが
[line[:-(line[-1] == '\n') or len(line)+1] for line in file]
これは or の戻り値が真偽ではなく、真偽が評価されたオブジェクトであることを利用したものです。
readlines`メソッドは、実際には以下のものと同等です。
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
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;
ファイル全体を読み込んで、str.splitlines`で行を分割することができます。
あるいは、手で改行を除去することもできます。
注意:この最後の方法は、ファイルが改行で終わっている場合にのみ有効で、そうでない場合は最終行の文字が失われます。
この仮定はほとんどの場合に当てはまります(特にテキストエディタで作成されたファイルでは、最後に改行が追加されることがよくあります)。
これを避けたい場合は、ファイルの最後に改行を追加します。
あるいは、もっと簡単な方法として、改行を
strip
することもできます。あるいは、かなり読めないが
これは
or
の戻り値が真偽ではなく、真偽が評価されたオブジェクトであることを利用したものです。readlines`メソッドは、実際には以下のものと同等です。
readline()が改行を保持しているので、readlines()も改行を保持しています。
Note:
readlines()
と対称的に、writelines()
メソッドは末尾の改行を追加しないので、f2.writelines(f.readlines())
はf2
のf
の正確なコピーを生成します。