Нижеприведённый код для конвертации csv -> xlsx работает на python 2.7. На 2.6 мне не удалось установить openpyxl с помощью pip install openpyxl, а на 3й версии io.open нужно заменить на просто open:
import io
from openpyxl import Workbook
# Convert to XLSX
csvfile = 'path_to_file.csv'
xlsxfile = 'path_to_file.xlsx'
workbook = Workbook(xlsxfile)
worksheet = workbook.add_worksheet()
with io.open(csvfile, 'rt', encoding='utf8') as f:
reader = csv.reader(f)
for r, row in enumerate(reader):
for c, col in enumerate(row):
worksheet.write(r, c, col)
workbook.close()
В принципе, таким способом можно приложить любой файл, в котором хранится не текстовая информация.
Ниже пример скрипта, отсылающего .xlsx файл:
import smtplib
from email.utils import formatdate
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
dst_emails = 'recipient1@example.com, recipient2@example.com'
xlsxfile = '/home/user/project1/example.xlsx'
# E-mail block
me = "sender@example.com"
# Filling e-mail info
msg = MIMEMultipart()
msg['Subject'] = "Xlsx file"
msg['From'] = me
msg['To'] = dst_emails
to = msg['To'].split()
msg['Date'] = formatdate(localtime=True)
html = """\
<html>
<head></head>
<body>
<p><br>
<strong>This is a test e-mail</strong><br>
<br>
Place body text here
Best regards,<br>
Example user<br>
</p>
</body>
</html>
"""
# Record the MIME type
letter = MIMEText(html, 'html')
# Attach letter into message container.
msg.attach(letter)
# Attach xlsx file
part = MIMEBase('application', "octet-stream")
part.set_payload(open(xlsxfile, "rb").read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename="%s"'%(xlsxfile))
msg.attach(part)
# Send the message via example.com SMTP server.
s = smtplib.SMTP('mail.example.com')
# sendmail function takes 3 arguments: sender's address, recipient's address
# and message to send - here it is sent as one string.
s.sendmail(me, to, msg.as_string())
s.quit()
Если вы заходите на VPN средставами Windows PPTP/L2TP (не CISCO и т. п. сторонними программами), то у вас есть 2 выбора:
весь трафик будет идти через VPN
только тот, для которого прописаны маршруты.
Первый вариант – по-умолчанию. Но он плох, т. к. если вы скачиваете/загружаете большие объемы информации, то это неплохо грузит маршрутизатор, который раздаёт доступ в VPN (надо шифровать траффик) и увеличивает задержку вашего соединения (пинг).
При втором варианте – нужно при каждом подключени идобавлять маршруты на те подсети, к которым вы хотите иметь доступ, находясь в VPN. Это можно автоматизировать, о чём я и расскажу ниже.
Для начала нужно отключить передачу всего траффика через VPN. Открываем Центр сетей и общего доступа (Networking and sharing center) в Панели Управления и, зайдя в свойства VPN-соединения, отключаем шлюз по-умолчанию:
Далее нам надо создать скрипт .netsh, который будет выполняться и добавлять роуты при подключении. Создаём, например, файл C:\scripts\vpn_route.netsh с содержимым:
где “Work_VPN” – название VPN соединения в Центре управления сетями и общим доступом. Маршрутов может быть сколько угодно, в примере указаны два.
Далее для выполнения всей магии, необходимо создать задачу в Планировщике, которая будет выполняться при подключении. Открываем консоль cmd от администратора и выполняем команду:
schtasks /create /F /TN "VPN Routes Add" /TR "netsh -f C:\scripts\vpn_route.netsh" /SC ONEVENT /EC Application /RL HIGHEST /MO "*[System[(Level=4 or Level=0) and (EventID=20225)]] and *[EventData[Data='Work_VPN']]"
где указываем путь к созданному ранее netsh файлу и снова же имя VPN соединения. Остальное менять не нужно.
По-умолчанию в Excel разделителем считается символ запятой “,” для файлов CSV. Однако, бывает необходимо открывать файлы CSV с другими разделителями (например, “;”) и чтобы при этом Excel автоматически разбрасывал данные по столбикам, а не воспринимал как просто строчку.
Для достижения этого, открываем файл в текстовом редакторе и добавляем в начало строчку с содержимым (включая кавычки):
Я ставил pyCharm очень давно и вот, когда пришла пора его использовать, я понял, что у меня не работают быстрые комбинации копирования и вставки Ctrl+C и Ctrl+V. Это просто катастрофа) но интернет подсказал решение:
1. Нажимаем Ctrl+Alt+S:
2. В поиске вверху слева вводит vim и отключаем плагин или меняем комбинации кнопок везде с vim на IDE, где найдёт поиск: