Объединение текстовых файлов, состоящих из списка списков? - PullRequest
0 голосов
/ 13 декабря 2018

Предположим, у меня есть два текстовых файла: 1.txt и 2.txt

Содержимое 1.txt как:

[['Hi', 'I'], ['I'], ['_am']]

и

Содержимоеиз 2.txt as:

[['_a', 'good'], ['boy']]

Как объединить то же самое и записать то же самое в новый файл, используя время, скажем, 3.txt, которое должно выглядеть следующим образом:

[['Hi', 'I'], ['I'], ['_am'], ['_a', 'good'], ['boy']]

Примечание. Я хочу, чтобы специальные символы (_) оставались такими, как есть.

Я пытался из предыдущего ответа о переполнении стека, упомянутого в Объединение текстовых файлов (.txtфайлы) со списком в Python?

Я попробовал следующее:

global inputList
inputList = []
path = "F:/Try/"
def load_data():
    for file in ['1.txt', '2.txt']:
        with open(path + file, 'r', encoding = 'utf-8) as infile:
           inputList.extend(infile.readlines())
    print(inputList)
load_data()

Но я не получаю желаемый результат, как показано выше.Вывод, который я получаю сейчас, выглядит следующим образом:

["[['Hi', 'I'], ['I'], ['_am']]", "[['_a', 'good'], ['boy']]"]

Почему в моем текущем выводе есть лишняя ("").

Пожалуйста, предложите что-нибудь продуктивное?

Заранее спасибо.

Ответы [ 5 ]

0 голосов
/ 13 декабря 2018

Попробуйте (не забудьте поставить звездный оператор):

import ast
global inputList
inputList = []
path = "F:/Try/"
def load_data():
    for file in ['1.txt', '2.txt']:
        with open(path + file, 'r', encoding = 'utf-8') as infile:
            inputList.extend(ast.literal_eval(*infile.readlines()))
    print(inputList)
load_data()
0 голосов
/ 13 декабря 2018
import ast
x="[['Hi', 'I'], ['I'], ['_am']]"
ast.literal_eval(x)

вывод:

[['Hi', 'I'], ['I'], ['_am']]

В вашем случае:

import ast
global inputList
inputList = []
path = "F:/Try/"
def load_data():
    for file in ['1.txt', '2.txt']:
        with open(path + file, 'r', encoding = 'utf-8') as infile:
           inputList.extend(ast.literal_eval(infile.readlines()))
    print(inputList)
load_data()
0 голосов
/ 13 декабря 2018
xlist = ["[['Hi', 'I'], ['I'], ['_am']]", "[['_a', 'good'], ['boy']]"]
ylist = []
for x in xlist:
    if x.startswith('[') and x.endswith(']'):
        ylist.append(x[1:-1])
zstring =''
for y in ylist:
    if zstring == '':
        zstring = y
    else:
        zstring += ', ' + y

print (zstring)
#['Hi', 'I'], ['I'], ['_am'], ['_a', 'good'], ['boy']
0 голосов
/ 13 декабря 2018

Вы можете использовать:

import json

with open("1.txt", "r") as t1, open("2.txt", "r") as t2, open("3.txt", "w") as t3:
    t3.write(json.dumps([eval(t1.read().strip()), eval(t2.read().strip())]))

3.txt

[[["Hi", "I"], ["I"], ["_am"]], [["_a", "good"], ["boy"]]]

Примечания:

0 голосов
/ 13 декабря 2018

Ваши файлы всегда выглядят так?Затем вы можете просто удалить «внешние» [ и ].

path = "F:/Try/"

def load_data():
    result = []
    for file in ['1.txt', '2.txt']:
        with open(path + file, 'r', encoding='utf-8') as infile:
            result.append(infile.readline().strip()[1:-1])
    return "[" + ", ".join(result) + "]"

print(load_data())

, которые печатает

[['Hi', 'I'], ['I'], ['_am'], ['_a', 'good'], ['boy']]
...