Python 批量编辑分组代码列表,以将公共代码与每个单独的代码连接起来

Python 批量编辑分组代码列表,以将公共代码与每个单独的代码连接起来,python,text,replace,Python,Text,Replace,我想在Python中尝试一些实用而具体的东西,我意识到我在玩口袋妖怪的时候浪费了插入代码的时间。有一个代码文本文件,其中的代码如下所示: 最顶端(82003884) 0001=主控球 82003884代码是基本代码,XXXX代码(masterball=0001)添加到末尾以获得该特定项目 我想修改文本文件中的所有代码,以便将第一个和第二个代码连接在一起。问题是,我还不知道如何处理它。我的第一反应是搜索并用一个以主代码开头的新词替换所有4个字符的“单词”。但我真的不明白Python如何解释像“0

我想在Python中尝试一些实用而具体的东西,我意识到我在玩口袋妖怪的时候浪费了插入代码的时间。有一个代码文本文件,其中的代码如下所示:

最顶端(82003884)

0001=主控球

82003884代码是基本代码,XXXX代码(masterball=0001)添加到末尾以获得该特定项目

我想修改文本文件中的所有代码,以便将第一个和第二个代码连接在一起。问题是,我还不知道如何处理它。我的第一反应是搜索并用一个以主代码开头的新词替换所有4个字符的“单词”。但我真的不明白Python如何解释像“0001=Master Ball”这样的行,以及如何将较长的主代码与4字符(XXXX)代码连接起来

此外,我不知道基于4个字符标准的查找替换是否具有足够的选择性,从而将过程仅限于代码本身(并且不影响奇怪的4个字符描述词,如“nest”等)

下面是它的样子:

0001 = Master Ball
0002 = Ultra Ball
0003 = Great Ball
0004 = Poke Ball
0005 = Safari Ball
0006 = Net Ball

…您描述它的方式是只有一个基本代码。在这种情况下,您可以读取文件的第一行,并将这一行的内容放在每一行的前面

然而,如果有多个基本代码(这似乎更可能),你必须决定你作为一个人如何决定某个东西是否是基本代码。有白线吗?基本代码是否始终是包含8位数字的字符串?一旦知道了这一点,就可以将其转换为Python或任何其他语言都能理解的规则

编辑

由于只有一个基本代码,下面的脚本已经可以了

pokemon.txt

12345678
0001 = Master Ball
0002 = Ultra Ball
0003 = Great Ball
0004 = Poke Ball
0005 = Safari Ball
0006 = Net Ball
123456780001 = Master Ball
123456780002 = Ultra Ball
123456780003 = Great Ball
123456780004 = Poke Ball
123456780005 = Safari Ball
123456780006 = Net Ball
prepend.py

def prepend_header(file_in, file_out):
    with (open(file_in, 'r')) as f:
        base_code = f.readline()[:-1]  # -1 to strip newline character
        new_string = ''
        for line in f:
            new_string += base_code + line
        print (new_string)

    with (open(file_out, 'w')) as f:
        f.write(new_string)

if __name__ == '__main__':
    prepend_header('pokemon.txt', 'pokemon_new.txt')
pokemon_new.txt

12345678
0001 = Master Ball
0002 = Ultra Ball
0003 = Great Ball
0004 = Poke Ball
0005 = Safari Ball
0006 = Net Ball
123456780001 = Master Ball
123456780002 = Ultra Ball
123456780003 = Great Ball
123456780004 = Poke Ball
123456780005 = Safari Ball
123456780006 = Net Ball

您需要的是正则表达式,或者正则表达式:正则表达式。它们是速度上的通配符。在这里,您需要一个与主代码匹配的代码,它将是
^\d{8}$
或者可能是
^\(\d{8}\)$
,这取决于文件中是否有这些括号。然后将其保存在一个变量中,并在再次将所有行保存到文件之前将其前置到下面的每一行

例如,在Python 3.4中,假设文件名为“pokemon_codes.txt”,并且位于当前目录中,以此类推:

import re   # for regular expressions
import os   # for renaming/deleting files

# open the file line by line, updating into temp file then overwriting
with open('pokemon_codes.txt', mode='r') as f_codes:
with open('pokemon_codes.out', mode='w') as f_out:
    for line in f_codes:
      if re.match('^\d{8}$', line):
        master = line.rstrip()          # now we know what the current master code is
      else:
        f_out.write(master + line)      # update with the master code/current code combination followed by the description, if any
os.remove('pokemon_codes.txt')
os.rename('pokemon_codes.out', 'pokemon_codes.txt')

主控球的代码是82003885(向底部添加1)还是820038840001(串联)?这本身与工作无关,尽管我可以理解为什么你会这么认为。这是关于你可能需要的任何个人辅导来获得这些想法,以及互联网上任何其他随机的人可能需要的任何个人辅导来获得类似的地方之间的共性。具体地说,这一点可能很少。这是一个问题,因为SE都是关于普通问题的,即使“普通”在某些情况下意味着“五个人”。也就是说,我有一个如何转换的想法。让我们看看。它是连接的(我相信这是正确的术语)。感谢没有白线,这是我描述它的基本方式。如果有帮助的话,我在文章的底部添加了一个更好的例子。这听起来很完美,但是关于“读取文件的第一行…”,我该如何系统地进行呢?您仍然只给出输入文本文件的一部分。给出更详细的部分,包括基本代码。只有一个基本代码(82003884)。我一次只发布了几行最近的内容,因为它们实际上都是这样的,而且我在这里的格式化速度也不是很快(它不是真正的“代码”,但希望格式化为这样)。