#python #csv #readlines
#python #csv #строки чтения
Вопрос:
У меня есть текстовый файл, который выглядит примерно так. Я хочу разбить строки таким образом, чтобы я мог получить отдельные столбцы для меня, чтобы иметь возможность отображать график.
node name | requested bytes | total execution time | accelerator execution time | cpu execution time
prefix/up23/conv2d_transpose 37.75MB (100.00%, 15.34%), 150.71ms (100.00%, 4.83%), 0us (0.00%, 0.00%), 150.71ms (100.00%, 4.83%)
prefix/up20/conv2d_transpose 18.87MB (84.66%, 7.67%), 115.01ms (95.17%, 3.68%), 0us (0.00%, 0.00%), 115.01ms (95.17%, 3.68%)
prefix/up17/conv2d_transpose 18.87MB (76.99%, 7.67%), 91.43ms (91.49%, 2.93%), 0us (0.00%, 0.00%), 91.43ms (91.49%, 2.93%)
prefix/fres19/conv_b_1x3/Conv2D 2.10MB (69.33%, 0.85%), 46.41ms (88.56%, 1.49%), 0us (0.00%, 0.00%), 46.41ms (88.56%, 1.49%)
prefix/fres5/conv_b_3x1/Conv2D 2.10MB (68.47%, 0.85%), 44.63ms (87.07%, 1.43%), 0us (0.00%, 0.00%), 44.63ms (87.07%, 1.43%)
prefix/fres6/conv_a_3x1/Conv2D 2.10MB (67.62%, 0.85%), 40.19ms (85.64%, 1.29%), 0us (0.00%, 0.00%), 40.19ms (85.64%, 1.29%)
prefix/fres22/conv_a_3x1/Conv2D 2.10MB (66.77%, 0.85%), 39.97ms (84.36%, 1.28%), 0us (0.00%, 0.00%), 39.97ms (84.36%, 1.28%)
prefix/fres21/conv_a_3x1/Conv2D 2.10MB (65.92%, 0.85%), 38.85ms (83.08%, 1.24%), 0us (0.00%, 0.00%), 38.85ms (83.08%, 1.24%)
pref
Я попробовал следующий сокращенный вариант, но он выдает результат, подобный этому:
with open('file.txt','r') as inp:
arr = []
for f in inp:
arr.append(f)
b = arr[514]
c = b.split(' ')
Вывод:
['prefix/up23/conv2d_transpose', '', '', '', '', '37.75MB', '(100.00%,', '15.34%),', '', '', '', '', '', '150.71ms', '(100.00%,', '4.83%),', '', '', '', '', '', '', '', '', '', '', '', '', '0us', '(0.00%,', '0.00%),', '', '', '', '', '', '150.71ms', '(100.00%,', '4.83%)n']
Пожалуйста, предложите, чтобы данные помещались в разные столбцы в csv.
Комментарии:
1. Почему бы просто не использовать
pandas
?2. Извините, я не знал, как это сделать в pandas.
3. Вы можете сделать:
c = b.split()
вместоc = b.split(' ')
4. @Ruturaj спасибо за это. Я не получаю ‘ ‘. Но теперь, как я должен добавить оставшиеся строки в столбцы.
5. @ashutosh Я только что опубликовал ответ
Ответ №1:
В вашем случае вы можете сделать:
with open('test.txt','r') as inp:
for f in inp.readlines():
print(f.split())
Который печатает:
['node', 'name', '|', 'requested', 'bytes', '|', 'total', 'execution', 'time', '|', 'accelerator', 'execution', 'time', '|', 'cpu', 'execution', 'time']
['prefix/up23/conv2d_transpose', '37.75MB', '(100.00%,', '15.34%),', '150.71ms', '(100.00%,', '4.83%),', '0us', '(0.00%,', '0.00%),', '150.71ms', '(100.00%,', '4.83%)']
['prefix/up20/conv2d_transpose', '18.87MB', '(84.66%,', '7.67%),', '115.01ms', '(95.17%,', '3.68%),', '0us', '(0.00%,', '0.00%),', '115.01ms', '(95.17%,', '3.68%)']
['prefix/up17/conv2d_transpose', '18.87MB', '(76.99%,', '7.67%),', '91.43ms', '(91.49%,', '2.93%),', '0us', '(0.00%,', '0.00%),', '91.43ms', '(91.49%,', '2.93%)']
['prefix/fres19/conv_b_1x3/Conv2D', '2.10MB', '(69.33%,', '0.85%),', '46.41ms', '(88.56%,', '1.49%),', '0us', '(0.00%,', '0.00%),', '46.41ms', '(88.56%,', '1.49%)']
['prefix/fres5/conv_b_3x1/Conv2D', '2.10MB', '(68.47%,', '0.85%),', '44.63ms', '(87.07%,', '1.43%),', '0us', '(0.00%,', '0.00%),', '44.63ms', '(87.07%,', '1.43%)']
['prefix/fres6/conv_a_3x1/Conv2D', '2.10MB', '(67.62%,', '0.85%),', '40.19ms', '(85.64%,', '1.29%),', '0us', '(0.00%,', '0.00%),', '40.19ms', '(85.64%,', '1.29%)']
['prefix/fres22/conv_a_3x1/Conv2D', '2.10MB', '(66.77%,', '0.85%),', '39.97ms', '(84.36%,', '1.28%),', '0us', '(0.00%,', '0.00%),', '39.97ms', '(84.36%,', '1.28%)']
['prefix/fres21/conv_a_3x1/Conv2D', '2.10MB', '(65.92%,', '0.85%),', '38.85ms', '(83.08%,', '1.24%),', '0us', '(0.00%,', '0.00%),', '38.85ms', '(83.08%,', '1.24%)']
Это то, чего вы хотите?
Ответ №2:
Вы могли бы использовать :
with open('file.txt','r') as inp:
arr = []
for f in inp:
arr.append(f)
b = arr[514]
c = b.split()
Также, если вы хотите придерживаться своего кода, вы можете удалить пустой элемент из списка
Используя
Output = [x for x in c if x]
Ответ №3:
Это не самый красивый код на свете, но я верю, что он решает вашу проблему. Я думал об использовании некоторого регулярного выражения, чтобы избежать разделения процентов, но решил, что данные всегда следуют одному и тому же шаблону, так что это должно сработать.
def remove_dangling_comma(content):
if content[-1] == ',':
return content[:-1]
return content
data_columns = []
with open("words.txt", 'r') as f:
for i, line in enumerate(f):
if i == 0:
continue # skip header
parts = line.split()
node_name = parts[0]
# concatenate broken parts of the same data and remove dangling commas, if any
requested_bytes = remove_dangling_comma(' '.join([parts[1], parts[2], parts[3]]))
total_time = remove_dangling_comma(' '.join([parts[4], parts[5], parts[6]]))
accelerator_time = remove_dangling_comma(' '.join([parts[7], parts[8], parts[9]]))
cpu_time = remove_dangling_comma(' '.join([parts[10], parts[11], parts[12]]))
# append the processed data to the list
data_columns.append([node_name, requested_bytes, total_time, accelerator_time, cpu_time])
print(data_columns)
Вывод:
[
['prefix/up20/conv2d_transpose', '18.87MB (84.66%, 7.67%)', '115.01ms (95.17%, 3.68%)', '0us (0.00%, 0.00%)', '115.01ms (95.17%, 3.68%)'],
['prefix/up17/conv2d_transpose', '18.87MB (76.99%, 7.67%)', '91.43ms (91.49%, 2.93%)', '0us (0.00%, 0.00%)', '91.43ms (91.49%, 2.93%)'],
['prefix/fres19/conv_b_1x3/Conv2D', '2.10MB (69.33%, 0.85%)', '46.41ms (88.56%, 1.49%)', '0us (0.00%, 0.00%)', '46.41ms (88.56%, 1.49%)'],
['prefix/fres5/conv_b_3x1/Conv2D', '2.10MB (68.47%, 0.85%)', '44.63ms (87.07%, 1.43%)', '0us (0.00%, 0.00%)', '44.63ms (87.07%, 1.43%)'],
['prefix/fres6/conv_a_3x1/Conv2D', '2.10MB (67.62%, 0.85%)', '40.19ms (85.64%, 1.29%)', '0us (0.00%, 0.00%)', '40.19ms (85.64%, 1.29%)'],
['prefix/fres22/conv_a_3x1/Conv2D', '2.10MB (66.77%, 0.85%)', '39.97ms (84.36%, 1.28%)', '0us (0.00%, 0.00%)', '39.97ms (84.36%, 1.28%)'],
['prefix/fres21/conv_a_3x1/Conv2D', '2.10MB (65.92%, 0.85%)', '38.85ms (83.08%, 1.24%)', '0us (0.00%, 0.00%)', '38.85ms (83.08%, 1.24%)']
]