Это небольшое приложение для журнала терминалов, над которым я работаю.
Предполагаемая функциональность: введите в терминале python3 journal.py whatever note I want to keep, with commas included. Запись «любая заметка, которую я хочу сохранить, с включенными запятыми» сохраняется в CSV в одной ячейке.
Фактическая функциональность: заметка «любая заметка, которую я хочу сохранить, с включенными запятыми» разбита на несколько ячеек на «,». Эта проблема была решена в функции multi_stuff, но тот же метод не работает в sys.argv [1:] в части название.
Есть предположения?
import csv
import sys
import re
import datetime
def record(stuff):
with open('journal.csv', 'a') as f:
f.write(str(datetime.datetime.now())+','+stuff+'\n')
def multi_line():
while True:
multi_stuff = input('Type "Q" to quit. Otherwise, talk to me -> ').lower()
if ',' in multi_stuff:
multi_stuff = multi_stuff.replace(',', '","')
if multi_stuff == 'q':
break
with open('journal.csv', 'a') as f:
f.write(str(datetime.datetime.now())+','+multi_stuff+'\n')
def search():
keyword = input('search term -> ').lower()
regex = r"\b(?=\w)" + re.escape(keyword) + r"\b(?!\w)"
with open('journal.csv', 'r') as csv:
for line in csv:
if re.search(regex, line):
print(line)
if __name__ == '__main__':
if sys.argv[1].lower() == '-s':
search()
elif sys.argv[1].lower() == '-m':
multi_line()
else:
arg = sys.argv[1:]
if ',' in arg:
arg = arg.replace(',', '","')
record(' '.join(arg))
else:
record(' '.join(arg))
',' in sys.argv[1:] будет истинным только в том случае, если один из аргументов командной строки состоит исключительно из запятой - другими словами, пробелов с обеих сторон. Возможно, вы захотите сначала выполнить ' '.join(arg), чтобы иметь дело только с одной строкой, а не со списком.
Интересная идея. Я попробую.
`else: arg = '' .join (sys.argv [1:]) if ',' в arg: arg = arg.replace (',', '", "') record (arg) else: record (' '.join (аргумент)) `
полностью сработало!






Пожалуйста, покажите ошибочный вывод.