2016-01-23 37 views
-1
f = open("Trades.txt","r") 
writer = open("trading.txt","w") 
options = input("A:Check trades for 1 or more players/B:Check trades between 2 players: ").lower() 

if options == 'b': 
    player1 = input("Enter the name of player 1: ") 
    player2 = input("Enter the name of player 2: ") 
    for lines in f: 
     if player1 and player2 in lines: 
      writer.write(lines) 

文本文件看起来是这样的:写从文件中的所有行到一个文件中,直到达到一个特定的字符串

======================= 
[time] player trading with playerx 
(To: player, From: playerx) 
item 
======================= 
[Jan 13, 2016 11:53:49 PM Central European Time] y trading with x 
(To: x, From: y) 
item 
======================= 

用户将被要求输入2名在文本文件中找到。

这两个名字必须在我已经完成的文本中找到。

然后,具有名称的行后面的行将不得不写入文件,直到达到“=======================”。

因此,写入的数据会看起来像:

[time] player trading with playerx 
(To: player, From: playerx) 
item 

在此先感谢

PS名称后的行数会不同,所以不能像写后线的一组量匹配

+0

Stack Overflow是不是免费的代码编写的服务。请向我们展示您解决此问题的尝试,并精确询问您遇到的问题。 –

+0

我有吗?看看第一位 – I3uzzzzzz

+0

可能重复[如何测试一个变量对多个值?](http://stackoverflow.com/questions/15112125/how-do-i-test-one-variable-against-多值) – MattDMo

回答

0

两件事情来解决

第一

if player1 and player2 in lines: 

是错误的,也许这是更好的

if player1 in lines and player2 in lines: 

停车时=======================中被发现环像

lines = lines.strip() 
if lines == '=======================': 
    break 

的“带()”函数从输入文件中的新行左右就行了精确匹配工作正常

只是要清楚代码

for lines in f: 
    if player1 and player2 in lines: 
     writer.write(lines) 

被替换

for lines in f: 
    if player1 in lines and player2 in lines: 
    lines = lines.strip() 
    if lines == '=======================': 
     break 
    writer.write(lines) 
+0

对不起,但我在哪里添加额外的代码给你? – I3uzzzzzz

+0

我已经添加了更多关于添加更改的详细信息 – Vorsprung

0

由于源文件的对象是一个迭代器,你可以在任何地方使用它,不仅在for line in f声明。

要消耗迭代,直到出现条件,可以使用​​函数。

只要谓词为真,就创建一个从迭代器返回元素的迭代器。

takewhile将创造新的迭代器,但它的副作用源迭代会被消耗掉。在文件对象情况下 - 它会读取行并移动内部文件指针。在耗尽takewhile迭代器之后,内部文件指针会指向===之后的第一行。

代码将类似这样的:

import itertools 

player1 = "x" 
player2 = "y" 
with open("Trades.txt") as src, open("trading.txt", "w") as dst: 
    for src_line in src: 
     if player1 in src_line and player2 in src_line: 
      dst.write(src_line) 
      for line in itertools.takewhile(lambda s: not s.startswith("======================="), src): 
       dst.write(line) 
相关问题