Записать строки из текстового файла в файл .csv

1

У меня есть следующий код, который создает файл csv (sw_mac_addr.csv). Прямо сейчас он пишет каждую строку, которую я хочу. Мне нужно отделить значения с помощью запятой (,).

одна строка из infile выглядит следующим образом: * 51 0000.0c9f.f033 static 0 FF sup-eth2

Я хочу, чтобы он появился в файле csv следующим образом: 51,0000.0c9f.f033,sup-eth2

import os
path = 'c:/sw_mac_addr/'
fh = open("C:/Users/cslayton2/Documents/sw_mac_addr.csv", "w+")
print('Switch Name', 'Port', 'mac addr', 'vlan', sep=",", file=fh)

for filename in os.listdir(path):
    with open(os.path.join(path,filename), "r") as infile:
        for line in infile:
            if line.startswith('*') or line.startswith('+'):
                fh.write(line)
fh.close()
  • 0
    Есть ли веская причина не использовать модуль csv в стандартной библиотеке здесь (или, возможно, стороннюю библиотеку, такую как Pandas)? Вы можете написать свой собственный код, который анализирует и создает строки CSV и получает все цитирование / экранирование / и т.д. правильно, но почему вы хотите?
  • 0
    Вы должны определенно использовать csv для чтения как infile и записи outfile .
Показать ещё 4 комментария
Теги:
python-3.x

2 ответа

0
import os
path = './text/'
# open this file for writing
with open("sw_mac_addr.csv", "w+") as fh:
    print('Switch Name', 'Port', 'mac addr', 'vlan', sep=",", file=fh)
    # get data from all files in the path
    for filename in os.listdir(path):
        with open(os.path.join(path,filename), "r") as infile:
            for line in infile:
                if line.startswith('*') or line.startswith('+'):
                    # if you want to get rid of the * and +, uncomment the following code
                    # line = line.replace("*","").replace("+","")
                    line = ",".join(line.split()) + "\n"
                    fh.write(line)
                    print(line)

вывода (как на консоли, так и на csv файле):

*,51,0000.0c9f.f033,static,0,F,F,sup-eth2

*,51,0000.0c9f.f033,static,0,F,F,sup-eth2

*,51,0000.0c9f.f033,static,0,F,F,sup-eth2

вывод с недокументированной строкой кода (строка = line.replace("*"; ""). replace ("+", "")

51,0000.0c9f.f033,static,0,F,F,sup-eth2

51,0000.0c9f.f033,static,0,F,F,sup-eth2

51,0000.0c9f.f033,static,0,F,F,sup-eth2
0

Панды могут делать это хорошо

import pandas as pd

df = pd.read_csv('c:/sw_mac_addr/mycsv.csv', sep=',')
df.to_csv('c:/sw_mac_addr/test.txt')

Ещё вопросы

Сообщество Overcoder
Наверх
Меню