попросить пользователя ввести файл для запуска программы с python - PullRequest
0 голосов
/ 17 марта 2019

У меня есть программа, которая объединяет французские слова, разделенные звездочкой в ​​тексте. Поскольку я хочу, чтобы эта программа использовалась разными пользователями, я хочу вставить в программу строку, запрашивающую пользователя ввести путь к текстовому файлу или просто ввести имя текста ... Как это сделать? Просто с помощью функции «вход»? Понятия не имею ... Есть ли элегантный способ попросить пользователя запустить программу? Программа ниже:

import nltk
from nltk.tokenize import word_tokenize
import re



with open ('text-test.txt') as tx:
   words = word_tokenize(tx.read().lower())

with open ('Fr-dictionary.txt') as fr:
    dic = word_tokenize(fr.read().lower())

l=[ ]
errors=[ ]
out_file=open("newtext.txt","w")

for n,word in enumerate (words):
    l.append(word)
    if word == "*":
        exp = words[n-1] + words[n+1]
        print("\nconcatenation error:", exp)

        if exp in dic:

            l.append(exp)
            l.append("$")

            errors.append(words[n-1])

            errors.append(words[n+1])
        else:
           continue

for i, w in enumerate(l):
    if w == "*":
        l.remove(l[i-1])
    else:
        continue

for i, w in enumerate(l):
    if w == "$":
        l.remove(l[i+1])
    else:
        continue


text=' '.join(l)
print('\n\n',text)
e=len(errors)

print('\n',e/2,'WORDS CONCATENATED IN TEXT',errors)


user=input('\nREMOVE * AND $ FROM TEXT? Type "Y" for yes or "N" for 
no:')


for x in l:
    if user=='Y' and x=='*':
        l.remove(x)
    elif user=='Y' and x=='$':
        l.remove(x)
    else:
        continue


final_text=' '.join(l)

print('\n\n', final_text)


user2=input('\nWrite text to a file? Type "Y" for yes or "N" for no:')

if user2 =='Y':
    out_file.write(final_text)
    out_file.close()
    print('\nText named "newtext.txt" written to a file')

Ответы [ 2 ]

0 голосов
/ 17 марта 2019
from pathlib import Path
data_folder = Path(input("type the path you would like to use"))
file_to_open = data_folder / input("insert the file you would like to use with its extension")
f = open(file_to_open)

Если вы не хотите использовать полный путь и просто используете локальный файл, расположенный в месте расположения скрипта, вам просто нужно спросить у пользователя его имя и открыть его с помощью f = open(filename) напрямую.

Примечание. Если вам интересно, почему вместо * конкатенации строк есть / в file_to_open + , то объясняет, почему.

0 голосов
/ 17 марта 2019

Вы можете делать это любым способом, но ваши пользователи записывают полный путь к файлу, это утомительно и подвержено ошибкам. То, что вы могли бы сделать, это иметь «папку просмотра». Это папка, о которой ваш скрипт уже знает, возможно, даже в той же папке, что и ваш скрипт.

Небольшой пример:

import os
import sys

# This prints the folder where the script is run.
script_directory = os.path.dirname(sys.argv[0])
print(script_directory)

# This is the folder we want to keep track off
our_watched_folder = f'{script_directory}/watch_folder'
print(our_watched_folder)

# Let's see if a user dropped a new file in our folder
print("Files in watch folder")
for file in os.listdir(our_watched_folder):
    print(file)

Выход:

C:/your_script_folder/
C:/your_script_folder/watch_folder
Files in watch folder
a_new_text_file.txt
some_old_textfile1.txt
some_old_textfile2.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...