2016-09-17 262 views
-1

我刚刚开始使用python,我正在创建一个简单的程序,它会问谁是用户是一个问题,然后从文本文件我会提取一个特定的行并打印该行,并随着行 - 最后我会添加他们的答案。这是代码。有没有办法避免使用`end =`

question = input("do you want to print the line") 
    if "yes" in question: 
     print(open("tp.txt").readlines()[:10][-1],end=question) 

问题是,end=question)将用户答案放在新行上。我知道end=\n相同。所以我只是想知道是否有一种方法或替代方法来阻止'end ='自动创建新行?

print(open("tp.txt").readlines()[:10][-1], 

是我打开和读取文件 特定行,因为它是一个“好”的快捷方式,而不是做而做with open (filename.txt,'r') as f:

+0

号:有没有办法 “读取特定行”。你可以这样做:'用open('file.txt')作为f:lines = f.readlines()'然后做'line_n = lines [n]',但是整个文件都会在内存中。这是因为文件基本上是**连续的**并且也不是基于行的*。 – Bakuriu

回答

0

问题的方法是,由readlines()返回的行包含结束换行:

$ echo 'a 
> b 
> c 
> ' > test_file.txt 
$ python3 
Python 3.5.2 (default, Jul 5 2016, 12:43:10) 
[GCC 5.4.0 20160609] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> with open('test_file.txt') as f: 
...  print(f.readlines()) 
... 
['a\n', 'b\n', 'c\n', '\n'] 

查看\n?注意bewteen的区别:

>>> print('a\n') 
a 

>>> 

和:

>>> print('a') 
a 
>>> 

所以,你要删除:

>>> with open('test_file.txt') as f: 
...  for line in f: 
...   print(line.rstrip('\n'), end='<something>') 
... 
a<something>b<something>c<something><something>>>> 
+0

因此'.rstrip'必须在任何特定的地方 –

+0

@ j.doe你是什么意思? 'rstrip'从字符串的末尾删除字符('r'代表* right *)。如果你想从字符串的开头移除,使用'lstrip'(其中'l'代表* left *)。如果你想从使用'strip'的开始和结束中删除。但考虑到换行符总是在右侧,我认为使用'rstrip'更好。 – Bakuriu

+0

哦好吧我严重误解我现在得到它。出于好奇心'with'和'as'是什么意思 –

相关问题