Замена определенных частей массива в разных папках через Pythion - PullRequest
0 голосов
/ 10 февраля 2020

Мой код выполняет замену всего файла. Принимая во внимание, что я хочу только определенные замены.

Ниже файл, который я пытаюсь заменить. Я просто хочу изменить некоторые слова в "sheetname": "Main"

 [  
  {
   "sheetname": "Main",
   "emp_details": [
        [
            "スバム",
            "ksing.shubh@gmail.com",
            "marble",
            "intern"
        ],
        [
            "Gaurav",
            "gaurav.singh@cobol.in",
            "snacks",
            "デボロッパ"
        ],
        [
            "ニキル",
            "nikhil@geeksforgeeks.org",
            "tennis",
            "Full Time"
        ]
       ]
     },
     {
    "sheetname": "Next",
    "emp_details": [
            [
                "スバム",
                "ksing.shubh@gmail.com",
                "fabrics",
                "intern"
            ],
            [
                "Gaurav",
                "gaurav.singh@cobol.in",
                "xenom",
                "デボロッパ"
            ],
            [
                "ニキル",
                "nikhil@geeksforgeeks.org",
                "hiltop",
                "Full Time"
            ]
          ]
         }
        ,{
        "sheetname": "Last",
        "emp_details": [
                [
                    "スバム",
                    "ksing.shubh@gmail.com",
                    "trend",
                    "intern"
                ],
                [
                    "Gaurav",
                    "gaurav.singh@cobol.in",
                    "souvenir",
                    "デボロッパ"
                ],
                [
                    "ニキル",
                    "nikhil@geeksforgeeks.org",
                    "urban",
                    "Full Time"
                ]
            ]
        }
 ]

Что я пытаюсь сделать, это заменить некоторые слова в "Main" "sheet", то есть sheetname = Main;

Заранее спасибо. Любая помощь будет отличной!

Ниже мой код:

import os, re

directory = os.listdir('/Users/Unicorn/Desktop/for all/change')
os.chdir('/Users/Unicorn/Desktop/for all/change')

for file in directory:
    open_file = open(file,'r', encoding='utf-8')
    read_file = open_file.read()
    # changing value
    regex = re.compile('Gaurav')
    # change value
    read_file = regex.sub('Singh', read_file)
    write_file = open(file,'w', encoding='utf-8')
    write_file.write(read_file)

Ответы [ 2 ]

0 голосов
/ 10 февраля 2020

это данные json, если вы сохраните их в файле, их можно загрузить с помощью модуля json и просто выполнить итерацию, а затем добавить ваше условие

import json
import os
import sys

directory = os.listdir('/Users/Unicorn/Desktop/for all/change')
os.chdir('/Users/Unicorn/Desktop/for all/change')

for file in directory:
    open_file = open(file,'r', encoding='utf-8')
    read_file = open_file.read()
    open_file.close()
    # loads json file so it can be treated just like dictionary/list object in python
    data_json = json.loads(read_file)

    # iterate sheet item in data
    for sheet in data_json:
        # this is where you put your condition for sheetname == "Main"
        if sheet['sheetname'] == 'Main':
            # iterate over emp_detail because it is a list
            for emp_detail in sheet['emp_details']:
                # this is my simple method to replace item on a list
                if 'Gaurav' in emp_detail:
                    emp_detail[emp_detail.index('Gaurav')] = 'Singh'
    data_final = json.dumps(data_json)
    open_file = open(file,'w', encoding='utf-8')
    open_file.write(data_final)
    open_file.close()
0 голосов
/ 10 февраля 2020

Наименование данных из файла как data:

 data = [  
  {
   "sheetname": "Main",
   "emp_details": [
        [
            "スバム",
            "ksing.shubh@gmail.com",
            "marble",
            "intern"
        ],
        [
            "Gaurav",
            "gaurav.singh@cobol.in",
            "snacks",
            "デボロッパ"
        ],
        [
            "ニキル",
            "nikhil@geeksforgeeks.org",
            "tennis",
            "Full Time"
        ]
       ]
     },
     {
    "sheetname": "Next",
    "emp_details": [
            [
                "スバム",
                "ksing.shubh@gmail.com",
                "fabrics",
                "intern"
            ],
            [
                "Gaurav",
                "gaurav.singh@cobol.in",
                "xenom",
                "デボロッパ"
            ],
            [
                "ニキル",
                "nikhil@geeksforgeeks.org",
                "hiltop",
                "Full Time"
            ]
          ]
         }
        ,{
        "sheetname": "Last",
        "emp_details": [
                [
                    "スバム",
                    "ksing.shubh@gmail.com",
                    "trend",
                    "intern"
                ],
                [
                    "Gaurav",
                    "gaurav.singh@cobol.in",
                    "souvenir",
                    "デボロッパ"
                ],
                [
                    "ニキル",
                    "nikhil@geeksforgeeks.org",
                    "urban",
                    "Full Time"
                ]
            ]
        }
 ]

import re

word_to_replace = 'Gaurav'
word_to_assign = 'Singh'

for dictionary in data:
    if dictionary.get('sheetname') == 'Main':
        list_data = dictionary.get('emp_details')
        new_data = []
        for item in list_data:
            if word_to_replace in item:
                new_item = []
                for word in item:
                    if word.lower().find(word_to_replace.lower()) == 0:
                        new_word = re.sub(word_to_replace, word_to_assign, word)
                        if new_word == word:
                            new_word = re.sub(word_to_replace.lower(), word_to_assign.lower(), word)
                        new_item.append(new_word)
                    else:
                        new_item.append(word)
                new_data.append(new_item)
            else:
                new_data.append(item)

        dictionary['emp_details'] = new_data

Вывод :

[{'sheetname': 'Main', 'emp_details': [['スバム', 'ksing.shubh@gmail.com', 'marble', 'intern'], ['Singh', 'singh.singh@cobol.in', 'snacks', 'デボロッパ'], ['ニキル', 'nikhil@geeksforgeeks.org', 'tennis', 'Full Time']]}, {'sheetname': 'Next', 'emp_details': [['スバム', 'ksing.shubh@gmail.com', 'fabrics', 'intern'], ['Gaurav', 'gaurav.singh@cobol.in', 'xenom', 'デボロッパ'], ['ニキル', 'nikhil@geeksforgeeks.org', 'hiltop', 'Full Time']]}, {'sheetname': 'Last', 'emp_details': [['スバム', 'ksing.shubh@gmail.com', 'trend', 'intern'], ['Gaurav', 'gaurav.singh@cobol.in', 'souvenir', 'デボロッパ'], ['ニキル', 'nikhil@geeksforgeeks.org', 'urban', 'Full Time']]}]
...