#python
Вопрос:
Следующий код выполняет поиск слов, указанных в списке, и при совпадении записывает строку в csv строку за строкой.
Я пытаюсь найти решение, чтобы вместо записи только по строкам 1-й элемент в списке был столбцом 1, а 2-й-столбцом 2 и так далее.
parm_list = ["electricalAntennaTilt ","iuantSectorId ", "eUtranCellFDDId "]
os.remove("Parm.csv")
#keyword = input("Enter keyword here: ")
with open('Parm.csv', 'w', newline='n', encoding='utf-8') as csvfile:
writer = csv.writer(csvfile)
writer.writerow(["eNB", "Parameter", "Value"])
for filename in os.listdir(directory):
for i in parm_list:
if filename.endswith(".txt"):
with open(filename, "r", encoding="UTF-8") as file:
for line in file:
if re.search(i, line):
with open('Parm.csv', 'a', newline='n', encoding='utf-8') as csvfile:
writer = csv.writer(csvfile)
writer.writerow([filename] [line])
else:
continue
Выходной ток:
315655.txt electricalAntennaTilt 30
315655.txt iuantSectorId 315655_1_4
Ожидаемый результат:
315655.txt electricalAntennaTilt 30 iuantSectorId 315655_1_4
Ответ №1:
Я не вижу ваших txt-файлов, так что просто предположение:
import csv
import os
import re
directory = "~/Desktop" # put here a path to your directory
parm_list = ["electricalAntennaTilt ","iuantSectorId ", "eUtranCellFDDId "]
os.remove("Parm.csv")
#keyword = input("Enter keyword here: ")
with open("Parm.csv", "w", newline="n", encoding="utf-8") as csvfile:
writer = csv.writer(csvfile)
writer.writerow(["eNB", "Parameter", "Value"])
for filename in os.listdir(directory):
if filename.endswith(".txt"):
row = [filename] # <--------- make a row for every file
for i in parm_list:
with open(filename, "r", encoding="UTF-8") as file:
for line in file:
if re.search(i, line):
row.append(line) # < ----- fill the row
# write the row to the csv file
with open("Parm.csv", "a", newline="n", encoding="utf-8") as csvfile:
writer = csv.writer(csvfile)
writer.writerow(row)
Ответ №2:
Почему вы каждый раз закрываете файл? Кроме того, попробуйте вместо этого выполнить итерацию параметров ( parm_list
) во внутреннем цикле:
parm_list = ["electricalAntennaTilt ","iuantSectorId ", "eUtranCellFDDId "]
os.remove("Parm.csv")
#keyword = input("Enter keyword here: ")
with open('Parm.csv', 'w', newline='n', encoding='utf-8') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=["eNB"] parm_list)
writer.writeheader()
for filename in os.listdir(directory):
if filename.endswith(".txt"):
with open(filename, "r", encoding="UTF-8") as file:
data = {'eNB': filename}
for line in file:
if data.keys() > set(parm_list):
break
for pattern in parm_list:
if pattern not in data and re.search(pattern, line):
data[pattern] = line.strip()
writer.writerow(data)
Комментарии:
1. Спасибо, мэдберд. Ваш код работает, за исключением того, что он приводит только к первому экземпляру слова в файле, а не ко всем из них.
2. Мне непонятно, как вы собираетесь справляться с ситуацией, когда есть несколько ключевых слов, приписываемых метрике 1, и ни одно из них не относится к метрике 2. Так что я не уверен, чем могу вам в этом помочь.
Ответ №3:
Не уверен, что это то, что вы ищете, но измените
with open('Parm.csv', 'a', newline='n', encoding='utf-8') as csvfile:
Для
with open('Parm.csv', 'a', newline='', encoding='utf-8') as csvfile:
во втором цикле.
Комментарии:
1. Спасибо арун чанд, к сожалению, это не дает мне того результата, который я ищу.