Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.08.2016, 18:39   #1
mrprim
Пользователь
 
Регистрация: 07.06.2016
Сообщений: 52
По умолчанию Открыть файл по расширению

Доброго времени суток, снова.
зачастил я к вам с вопросами, но что уж поделать если есть люди которые умело поясняют.
В общем, такая ситуация, есть некий текстовый файл к примеру: 1234.uuu
так вот, в нём хранится информация, у меня есть метод который берет эту информацию и закидывает в файл *.ooo
Мне нужно написать метод который сам глянет все файлы .uuu и создаст файлы с таким же именем но .ooo
mrprim вне форума Ответить с цитированием
Старый 14.08.2016, 13:37   #2
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

Можно решить эту проблему по разному.
Самый просто наврное будет такой:

Я пишу из под Linux,
поэтому некоторые вещи могуть быть не такими, если ты пишешь из под окон.
Ты под какой OS пишешь ?

Если посмотреть на список файлов в моем случае, выглядит так:
Есть файлы которые мне нужны, и есть которые я не хочу обрабатывать.

PHP код:
toor@tr:/tmp/data-dirls -l
A
.uuu
A
.wrong.file
B
.uuu
B
.wrong.file
main
.py 

Первое что нужно вообще получить (программно), это список файлов.

Можно решить так:

PHP код:

#!/usr/bin/python
import os

# =======================================================
CURR_DIR "/tmp/data-dir/";

ALL_FILES os.listdirCURR_DIR );

for 
_file in ALL_FILES:

    print(
"PATH: ["+CURR_DIR+"] FILE: ["+_file+"]" ); 
На выходе подучим вот такое.
Код:
toor@tr:/tmp/data-dir$ python main.py 
PATH: [/tmp/data-dir/] FILE: [B.wrong.file]
PATH: [/tmp/data-dir/] FILE: [B.uuu]
PATH: [/tmp/data-dir/] FILE: [A.wrong.file]
PATH: [/tmp/data-dir/] FILE: [main.py]
PATH: [/tmp/data-dir/] FILE: [A.uuu]
Теперь нужно определиться, как мы вообще будет фильтровать эти фалы.
Берем все файлы которые имеют разширение "*.uuu"

Что-бы взять разширение фала, можно просто его разбить на части по (.) точке.

Или воспользоваться встроенным решение Питона.

Я привиду оба решения, сам решай что тебе больше нравится:
Но по сути они делают одно и тоже, разница будет лишь в имплементации.
Что соответственно скажется на скорости, и прожорливости памяти.

На выходе подучим вот такое. (1ом и 2ом варианте)
За мальким исключение: вот этот метод "os.path.splitext"

запишет разширение вот так ".exe", а первый так "exe"

PHP код:

for _file in ALL_FILES:

    
F_DATA _file.split(".");
    print(
"F_NAME: ["+F_DATA[0]+"] F_EXE: ["+F_DATA[1]+"]");

    
F_NAMEF_EXE os.path.splitextCURR_DIR+_file );
    print(
"F_NAME: ["+F_NAME+"] F_EXE: ["+F_EXE+"]"); 
Код:
toor@tr:/tmp/data-dir$ python main.py 
F_NAME: [B] F_EXE: [wrong]
F_NAME: [B] F_EXE: [uuu]
F_NAME: [A] F_EXE: [wrong]
F_NAME: [main] F_EXE: [py]
F_NAME: [A] F_EXE: [uuu]
Теперь осталось только работать с фалами, но это ты сам знаешь что там и как ты делашь.

Теперь все в месте + создание / запись новых фалов.

PHP код:
#!/usr/bin/python
import os

# =======================================================
CURR_DIR "/tmp/data-dir/";

ALL_FILES os.listdirCURR_DIR );

for 
_file in ALL_FILES:

    
# Разбиваем строку по [.] и получаем масив строк
    
F_DATA _file.split(".");

    
F_NAME F_DATA[0]; # Имя файла
    
F_EXE  F_DATA[1]; # Разширение файла

    
if F_EXE == "uuu":

        
# Считываем по строчно файл [CURR_DIR+_file]
        # И добавляем каждую строку в массив 
        
DATA_FROM_FILE openCURR_DIR+_file ).readlines(); 

        
# Открываем новый файл для записи "w == запись"
        
FS_OUT openF_NAME+".ooo""w" );

        for 
data in DATA_FROM_FILE:
            
FS_OUT.writedata+"\n" );

        
# Закрываем файл
        
FS_OUT.close();

# ======================================================= 
Есть одно но: Если вдруг на попядется файл который не будет иметь разширения, то программа упадет.

Что-бы обезопасить себя, можно делать проверку.

PHP код:

#!/usr/bin/python
import os

# =======================================================
CURR_DIR "/tmp/data-dir/";

ALL_FILES os.listdirCURR_DIR );

for 
_file in ALL_FILES:

    
# Разбиваем строку по [.] и получаем масив строк
    
F_DATA _file.split(".");


    try:

        
F_NAME F_DATA[0]; # Имя файла
        
F_EXE  F_DATA[1]; # Разширение файла

    
except Exception as _err:

        
#print( "ERROR: "+str(_err) );
        # Сразу переходим на следующую итерацию
        # Так-как это 100% не тот файл котрые нам нужен 
        
continue;


    if 
F_EXE == "uuu":

        
# Считываем по строчно файл [CURR_DIR+_file]
        # И добавляем каждую строку в массив 
        
DATA_FROM_FILE openCURR_DIR+_file ).readlines(); 

        
# Открываем новый файл для записи "w == запись"
        
FS_OUT openF_NAME+".ooo""w" );

        for 
data in DATA_FROM_FILE:
            
FS_OUT.writedata+"\n" );

        
# Закрываем файл
        
FS_OUT.close();

# ======================================================= 
И последнее, если файл в который мы будем писать существует.

А мы открываем его с фдагом "w"

fs = open("file_name", "w"); Файл будет полностью стерт, и перезаписан.
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/
pompiduskus вне форума Ответить с цитированием
Старый 15.08.2016, 07:10   #3
mrprim
Пользователь
 
Регистрация: 07.06.2016
Сообщений: 52
По умолчанию

Цитата:
Сообщение от pompiduskus Посмотреть сообщение
Можно решить эту проблему по разному.
Самый просто наврное будет такой:

Я пишу из под Linux,
поэтому некоторые вещи могуть быть не такими, если ты пишешь из под окон.
Ты под какой OS пишешь ?
...

И последнее, если файл в который мы будем писать существует.

А мы открываем его с фдагом "w"

fs = open("file_name", "w"); Файл будет полностью стерт, и перезаписан.
всё супер, изменил под себя, получилось то что нужно.
А то что файл перезаписывается это еще лучше
Очередной раз спасибо вам!
Питон используется в проекте и изучать его с самого начала не хватает времени и о многих встроенных фичах питона не знал. Очень хорошо объясняете!=)
mrprim вне форума Ответить с цитированием
Старый 15.08.2016, 13:38   #4
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

Вот и хорошо! Не зря старался.
Ты главное не просто копируй, вникай в то что происходит.
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/
pompiduskus вне форума Ответить с цитированием
Старый 16.08.2016, 18:15   #5
mrprim
Пользователь
 
Регистрация: 07.06.2016
Сообщений: 52
По умолчанию

Цитата:
Сообщение от pompiduskus Посмотреть сообщение
Вот и хорошо! Не зря старался.
Ты главное не просто копируй, вникай в то что происходит.
а как сделать если нужно ввести имя файла самому и с ним провести те же операции, пробую:
PHP код:
s=raw_input("Enter filename: ")
str s
for word in str:
        
FILE_DATA word.split(".")
        print 
FILE_DATA 
при вводе имени файла 123.uuu
выводит посимвольно [1] [2] [3] [u] [u] [u]

если делаю так:
PHP код:

s
=raw_input("Enter filename: ")
str s
for word in str.split("."):
        print 
word 
при вводе 123.uuu
выводит 2 элемента [123] [uuu]
но если пытаюсь получить доступ ко второму элементу word[1] То выводит просто по второму символу от каждого элемента
mrprim вне форума Ответить с цитированием
Старый 16.08.2016, 20:02   #6
mrprim
Пользователь
 
Регистрация: 07.06.2016
Сообщений: 52
По умолчанию

всегда бесило, если проблема решилась то человек форум закрывает, поэтому если кто то забредёт в эту тему по той же проблеме, я сделал так:

PHP код:
CURR_DIR "/MyBasicPy/"
ALL_FILES os.listdirCURR_DIR )

        while 
1:
                
i=0
                
for word in s.split("."):
                        if 
i==0:
                                
FILE_NAME word
                        
else: FILE_EXE word
                        i
+=1
                
for _file in ALL_FILES:
                        
FILE_DATA_DIRR _file.split(".")
                        try: 
                                
FILE_NAME_DIRR FILE_DATA_DIRR[0]
                                
FILE_EXE_DIRR  FILE_DATA_DIRR[1]
                        
except Exception as _err:  
                                continue
                        if (
FILE_NAME_DIRR == FILE_NAME) and (FILE_EXE_DIRR == "uuu"):
                                print 
"FILE: ["+_file+"]"
                                
f=open(_file"r")
                                
save_hex(FILE_NAME_DIRR+".ooo"//сторонний метод для перезаписи в другой файл
                                
print ("The bytecode has been written to the "+FILE_NAME_DIRR+".ooo")
                                
FILE_EXE 0
                                s
=0
                        
else:
                                continue
                if 
s=='ss':
                        print (
"Thanks, bye!")
                        break 
если кто может подсказать как исправить эту кривую часть
PHP код:
                i=0
                
for word in s.split("."):
                        if 
i==0:
                                
FILE_NAME word
                        
else: FILE_EXE word
                        i
+=
то буду рад это сделать)
mrprim вне форума Ответить с цитированием
Старый 17.08.2016, 00:47   #7
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

Все потому-что ты не вникаешь в суть, а просто копируешь и все. Вот если просто посмотреть сюда

Ты считываешь имя файла, а потом начинаешь перебирать его как будто-бы это массив. Но там строка которую ты-же ему и передал.

Но Питон умный, он делает все что может. Вот и получается что он начинает делить строку на символы.

А вот так будет то что ты хотел, наверное.
PHP код:

_input 
raw_input("Enter filename: ");
print( 
_input );

FILE_DATA _input.split(".");

FILE_NAME FILE_DATA[0];
FILE_EXE   FILE_DATA[1]; 
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/

Последний раз редактировалось pompiduskus; 17.08.2016 в 01:03.
pompiduskus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чем открыть файл messages.qdb. Это файл истории icq. Seniora Софт 19 23.04.2016 09:15
Открыть файл, разделить ячейку на 1000, сохранить файл, закрыть файл. Как? Ник Харди Microsoft Office Excel 7 30.01.2012 18:47
Открыть файл :-( Кристинка89 Общие вопросы Delphi 11 17.02.2011 00:37
Поиск по расширению Memories Общие вопросы Delphi 6 20.09.2007 20:03