加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 追加到文件中的某个点,每次都增加一个值

发布时间:2020-12-20 13:51:22 所属栏目:Python 来源:网络整理
导读:我是编程新手.这是我的第一个“适当的”项目,将被其他人使用. 该程序询问各种问题,然后将新的商店条目写入文件.对于一个空文件,我有大部分工作,但成品需要在现有文件中的特定点插入条目. 2个问题令我困惑: 如何在“Back:”之前将新的商店条目插入到文件中,
我是编程新手.这是我的第一个“适当的”项目,将被其他人使用.

该程序询问各种问题,然后将新的商店条目写入文件.对于一个空文件,我有大部分工作,但成品需要在现有文件中的特定点插入条目.

2个问题令我困惑:

如何在“Back:”之前将新的商店条目插入到文件中,以及每次添加条目时如何将“InventoryLocation:”增加1

附加到的文件具有以下结构:

# shop 1
SuperSpaceSquids:
   RewardType: playercommand
   PriceType: free
   Reward:
   - ewarp Shop-SuperSpaceSquids
   MenuItem:
   - type:SKULL_ITEM
   - playerhead:MHF_Squid
   - durability:3
   - amount:1
   - name:&5SuperSpaceSquids
   - 'lore:&6&o"Squid Shop From Space!"'
   Message: ''
   InventoryLocation: 38
   ExtraPermission: ''
# shop 2
HadesKitty:
   RewardType: playercommand
   PriceType: free
   Reward:
   - ewarp Shop-HadesKitty
   MenuItem:
   - type:SKULL_ITEM
   - playerhead:Turtle_Em
   - durability:3
   - amount:1
   - name:&5HadesKitty
   - 'lore:&6&o"our prices are fair!..."'
   Message: ''
   InventoryLocation: 39 # This value needs to be incremented by 1 each time
   ExtraPermission: ''
>> insert new shops here <<
Back:
   RewardType: shop
   PriceType: free
   Reward: Shop_Menu
   MenuItem:
   - type:REDSTONE
   - amount:1
   - name:&cBack
   - lore:&8Back to Shop Menu
   InventoryLocation: 54

这是写入文件的功能:

def write(shop,id,data,desc,skull):
    f = open('file.yml','w')
    f.write("  %s:" % shop)
    f.write("n    RewardType: playercommand")
    f.write("n    PriceType: free")
    f.write("n    Reward:")
    f.write("n    - ewarp shop-%s" % shop)
    f.write("n    MenuItem:")
    if skull:
        f.write("n    - Type:SKULL_ITEM")
        f.write("n    - playerhead:%s" % skull)
        f.write("n    - durability:3")
    if not skull:
        f.write("n    - id:%s" % id)
    if data:
        f.write("n    - durability:%s" % data)
    f.write("n    - amount:1")
    f.write("n    - name:&5%s" % shop)
    f.write("n    - 'lore:&6&o"%s"'" % desc)
    f.write("n    Message:")
    f.write("n    InventoryLocation:")
    f.write("n    ExtraPermission: ''")
    f.flush()
    print "nAll done."
    print "nHit Return to quit or 1 to add more shops."

    while True:
        choice = raw_input(prompt)
        if choice == "":
            print "nGoodbye!"
            f.close()
            time.sleep(2)
            exit(0)
        elif choice == "1":
            os.system('cls' if os.name == 'nt' else 'clear')
            input()
        else:
            print "I dont understand that."

解决方法

这是一个很好的问题.我为你写了两个函数:

insert_before_back(列表,列表)

insert_before_back接收文件行的列表以及在Back:之前要添加的所有行的列表,然后返回一个列表,并在正确的索引中添加项目.

add_inventory(list,string)

add_inventory接收文件行的列表以及要增加其库存的商店名称.然后它经过并将该数字加1,并将列表中的值重置为新增加的值.它返回一个新行的列表.

您可以使用这些来修改您读入的行的列表,然后只需浏览列表中的所有新修改的项目,并将每个项目写入具有相同名称的文件.

以下是我使用这两个函数的一个例子:

def insert_before_back(lines,thingsToAdd):
    backIndex = lines.index('Back:n')
    for item in reversed(thingsToAdd):
        lines.insert(backIndex,item)
    return lines

def add_inventory(lines,shopName):
    shopFound = 0
    for i in range(len(lines)):
        if shopName in lines[i]:
            shopFound = 1
        if 'InventoryLocation:' in lines[i] and shopFound:
            shopFound = 0
            lineSplit = lines[i].split(': ')
            incrementInventory = str(int(lineSplit[-1]) + 1)
            lineSplit[-1] = incrementInventory + 'n'
            lines[i] = ': '.join(lineSplit)


newLines = []
with open('input.txt','r') as f:
    inputLines = f.readlines()
    newLines = insert_before_back(inputLines,['Hellon','Fromn','heinstn'])
    add_inventory(newLines,'HadesKitty')

with open('output.txt','w') as f:
    for line in newLines:
        f.write(line)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读