Привет всем, кто заинтересован.
Я хотел сохранить массив в текстовый файл Python и извлечь его полностью, чтобы я мог обратиться ко всем элементам.
Я продолжил свою проблему и решил ее с помощью очень грязного кода, я уверен.
Код ниже делает то, что я хотел сделать.
Бессмысленное упражнение, но я просто должен был это сделать.
Спасибо за вашу помощь и идеи.
my_list = []
my_list_669 = []
def create_list():
#Creating the list
for x in range(5):
my_list.append(["Hello", "World", x])
print("my_list = ", my_list)
def save_list_to_file():
#creating the string
string_1 = ""
for item in my_list:
string = item[0] + "," + item[1] + "," + str(item[2]) + "\n"
string_1 += string
#adds records to a string with a line return after each record
with open('your_file.txt', 'w') as f:
f.write(string_1)
def recover_list():
with open('your_file.txt', 'r') as f:
tiing = f.read().splitlines()
#splits lines at \n and inserts into array called 'tiing'
#each item is equivalent to a record
for items1 in tiing:
my_list_69 = items1.split(",")
#splits the array items in ting at "," mark
#these are now in an array called 'my_list_69'
#below I access all items from within the list
#and append them to a temporary sub-list
sub_list = []
for items in my_list_69:
sub_list.append(items)
my_list_669.append(sub_list) this reconstructs the list
create_list()
save_list_to_file()
recover_list()
Testing:
print(my_list_669)
print(my_list_669[0])
print(my_list_669[0][2])
for items in my_list_669:
print(items)
Вы также захотите допускать другие вещи перед классом в теге Div
<div[^>]*class="footer"[^>]*>(.*?)</div>
Кроме того, пойдите нечувствительные к регистру. Вы, возможно, должны выйти из вещей как кавычки или наклонной черты в закрывающем тэге. Какой контекст Вы выполняете в этом?
Также обратите внимание, что парсинг HTML с регулярными выражениями может быть очень противным, в зависимости от входа. Положительная сторона поднята в ответе ниже - предполагают, что у Вас есть структура как:
<div>
<div class="footer">
<div>Hi!</div>
</div>
</div>
Попытка создать regex для этого является залогом провала. Ваш лучший выбор состоит в том, чтобы загрузить документ в DOM и выполнить манипуляции на этом.
Псевдокод, который должен отобразиться тесно на XML:: DOM:
document = //load document
divs = document.getElementsByTagName("div");
for(div in divs) {
if(div.getAttributes["class"] == "footer") {
parent = div.getParent();
for(child in div.getChildren()) {
// filter attribute types?
parent.insertBefore(div, child);
}
parent.removeChild(div);
}
}
Как другие люди сказали, HTML известно хитер для контакта с использованием regexes, и подход DOM мог бы быть лучше. Например:
use HTML::TreeBuilder::XPath;
my $tree = HTML::TreeBuilder::XPath->new;
$tree->parse_file( 'yourdocument.html' );
for my $node ( $tree->findnodes( '//*[@class="footer"]' ) ) {
$node->replace_with_content; # delete element, but not the children
}
print $tree->as_HTML;
В Perl Вам нужно /s
модификатор, иначе точка не будет соответствовать новой строке.
Тем не менее использование надлежащего HTML или синтаксического анализатора XML для удаления нежелательных частей файла HTML является намного более соответствующим.
<div[^>]*class="footer"[^>]*>(.*?)</div>
Работавший для меня, но должен был использовать обратные косые черты перед специальными символами
<div[^>]*class=\"footer\"[^>]*>(.*?)<\/div>
Частично зависит от точного regex механизма, который Вы используете - который язык и т.д. Но одна возможность состоит в том, что необходимо выйти из кавычек и/или наклонной черты вправо. Вы могли бы также хотеть сделать это нечувствительным к регистру.
<div class=\"footer\".*?>(.*?)<\/div>
Иначе скажите, какой язык/платформу Вы используете-.NET, Java, жемчуг...
Попробуйте это:
<([^\s]+).*?class="footer".*?>([.\n]*?)</([^\s]+)>
Ваша самая большая проблема будет вложенными тегами. Например:
<div class="footer"><b></b></div>
Данный regexp соответствовал бы всему через </b>
, отъезд </div>
свисание на конце. Необходимо будет или предположить, что тег, который Вы ищете, не имеет никаких вложенных элементов, или необходимо будет использовать своего рода синтаксический анализатор от HTML до DOM и запроса XPath для удаления всего поддерева.
Это будет хитро из-за жадности регулярных выражений, (Обратите внимание, что мои примеры могут быть характерны для жемчуга, но я знаю, что жадность является общим вопросом с REs.) Второе .*?
будет соответствовать как можно больше перед </div>
, таким образом, если у Вас есть следующее:
<div class="SomethingElse"><div class="footer"> stuff </div></div>
Выражение будет соответствовать:
<div class="footer"> stuff </div></div>
который маловероятен, что Вы хотите.
почему нет <div class="footer".*?</div>
Я не regex гуру также, но я не думаю, что необходимо указать что последняя скобка для открытого тега Div