انجمنهای فارسی اوبونتو
کمک و پشتیبانی => برنامهسازی => نویسنده: Nelliel در 05 خرداد 1395، 07:22 بظ
-
سلام
دارم یه اسکریپت مینویسم که سورسش این شده تا الان:
#!/bin/python3
# Import needed modules
import sys
import os
import re
# clear Screen
os.system("clear")
# Get Video and Sub from Argument
subtitle = (sys.argv[1])
video = (sys.argv[2])
# Get key from user
key_ints = input("What is your Key? ")
# open file and read it
with open(subtitle, 'r') as open_read:
for line in open_read:
if key_ints in line:
print(line)
قسمت آخر سورس ما هر کلمهای را که به عنوان key_input داده ایم پیدا میکند برای مثال:
[hossein@ArchLinux Scripts]$ ./subvid Gods.of.Egypt.2016.1080p.WEB-DL.DD5.1.H264-RARBG.srt go.go
What is your Key? help
He'll help us with our task.
i need your help. Please!
I thought he was helping you.
please, help us!
Let me help you.
thoth for help.
But you have to help us!
I didn't want her help.
My duty was to help
I'm helping horus.
he's going to help us.
get you to help him?
Perhaps we can help her.
she's trying to help us.
i ask for your help.
want to help her.
to go help a friend.
[hossein@ArchLinux Scripts]$
حالا من میخوام به آن الگویی دهم که به جای این که خط را برای من چاپ کند برود و آخرین قسمت عددی را برای من چاپ کند منظورم اینه که اگر کلمهی Egypt را به عنوان Key_input دادم به جای اینکه اون خط را چاپ کند عبارت 00:01:05,499 --> 00:01:08,500 را چاپ کند که آخرین خط عددی من هست, متن اصلی این است:
00:01:05,499 --> 00:01:08,500
<i> Egypt was the birthplace</i>
<i> of all life.</i>
اما اسکریپت من فقط Egypt was the birthplace را چاپ میکند!
-
میتونی از counter استفاده کنی. (تنها راه نیست، ولی چیزی هست که سریع به ذهنم رسید...)
myfile = file("/home/geek/Desktop/mysub","r")
mystrings = myfile.readlines()
c = 0
for i in mystrings:
if 'Egypt' in i:
print mystrings[c-1]
c = c + 1
تا جایی که تست کردم درست کارکرده...
-
الان ۲ بار مجبور شدم کدی رو که گذاشتم اصلاح کنم! یکی اینکه حین تست Iran رو نوشته بودم و دیگه اینکه یه print c هم برای trace کردن.
-
میتونی از counter استفاده کنی. (تنها راه نیست، ولی چیزی هست که سریع به ذهنم رسید...)
myfile = file("/home/geek/Desktop/mysub","r")
mystrings = myfile.readlines()
c = 0
for i in mystrings:
if 'Egypt' in i:
print mystrings[c-1]
c = c + 1
تا جایی که تست کردم درست کارکرده...
بهتر نیست یک الگو باشه؟! حالا شما فکر کن مثلا عدد باشه بعد 4 خط بعدش هم جمله باشه تا دوباره به عدد برسه! این Eygpt یک مثال بود در کل دنبال راهی هستم که حجت را تمام کنه ;)
-
تمام متون تگ و رو دارن؟
-
تمام متون تگ و رو دارن؟
زیرنویس هستند دیگر, بله دارند البته توفیقی هم نمیکنه چون تابع get text را داریم :)
-
نکته: زیرنویسی که من روش کار کردم Line Ending یونیکس/لینوکسی داشته (زیرنویس ضمیمه شد).
myaddress = '/home/geek/Desktop/mysub2'
myfile = open(myaddress,'r')
with open(myaddress) as f:
mysum = sum(1 for _ in f)
myprimary = []
mymain = []
for i in xrange(mysum + 1):
mystr = myfile.readline()
if '-->' in mystr:
myprimary.append(mystr)
while True:
mystr = myfile.readline()
if mystr == '\n':
break
else:
myprimary.append(mystr)
mymain.append(myprimary)
myprimary = []
for i in mymain:
for j in i:
if 'biology' in j:
print i[0]
خروجی در واقع یه لیست اصلی هست که چندین زیرلیست داره و عنصر اول هرکدوم از این زیرلیستها زمان شروع و خاتمه جملاتی هست که در اون لیست واقع شده!...
کد رو برای زیرنویسی که ضمیمه کردم تست کردم و نتیجه خوب بوده، حالا باید در شرایط مختلف (همون حالات خاصی که گفتید) تست بشه...
شایدم بگی اومدیم و یه جمله --> توش بود! حالا چیکار کنیم؟
فکر کنم راه حلش ساده باشه، تا جایی که من دیدم (اینم در نظر بگیر که اهل فیلم نیستم و بنابراین زیرنویسهای کمی دیدم!!) قسمت زمانبندی زیرنویس یه طول مشخصی داره و همچنین --> در پوزیشن خاصی قرار میگیره که میشه از اینا کمک گرفت...
-
سلام
کد را تبدیل کردم به پایتون 3 و اجرا کردم.
سورس:
#!/bin/python3
myaddress = '/home/hossein/Scripts/mysub2'
myfile = open(myaddress,'r')
with open(myaddress) as f:
mysum = sum(1 for _ in f)
myprimary = []
mymain = []
for i in range(mysum + 1):
mystr = myfile.readline()
if '-->' in mystr:
myprimary.append(mystr)
while True:
mystr = myfile.readline()
if mystr == '\n':
break
else:
myprimary.append(mystr)
mymain.append(myprimary)
myprimary = []
for i in mymain:
for j in i:
if 'biology' in j:
print(i[0])
خطا:
runfile('/home/hossein/Scripts/subtest.py', wdir='/home/hossein/Scripts')
Traceback (most recent call last):
File "<ipython-input-2-c562019338cb>", line 1, in <module>
runfile('/home/hossein/Scripts/subtest.py', wdir='/home/hossein/Scripts')
File "/usr/lib/python3.5/site-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 714, in runfile
execfile(filename, namespace)
File "/usr/lib/python3.5/site-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 89, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "/home/hossein/Scripts/subtest.py", line 5, in <module>
mysum = sum(1 for _ in f)
File "/home/hossein/Scripts/subtest.py", line 5, in <genexpr>
mysum = sum(1 for _ in f)
File "/usr/lib/python3.5/encodings/ascii.py", line 26, in decode
return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 689: ordinal not in range(128)
تازه اگر کار کنه باید یه جوری اضافش کنم به اسکریپت خودم .... که فعلا این بحث را میذاریم برای بعد :)
-
پس چرا برای من داره با پایتون ۳ مثل ساعت کار میکنه؟
-
پس چرا برای من داره با پایتون ۳ مثل ساعت کار میکنه؟
برای من به این خط گیر میده:
mysum = sum(1 for _ in f)
ویرایش:
جا داره همین جا احسان فعالپور را صدا بزنم :)
-
اونو الان چک میکنم ولی آدرس مفسر اینجا نیست؟
/usr/bin/python3
یا تو آرچ اون آدرسی هست که گذاشتی؟
-
اون کد رو میتونی با این جایگزین کنی:
with open(myaddress) as f:
mysum = len(f.readlines())
-
اونو الان چک میکنم ولی آدرس مفسر اینجا نیست؟
/usr/bin/python3
یا تو آرچ اون آدرسی هست که گذاشتی؟
با جفتش کار میکنه ....
-
سلام بفرمایید اینم برنامه :
#!/bin/python3
# Import needed modules
import sys
import os
import re
# clear Screen
os.system("clear")
# Get Video and Sub from Argument
subtitle = (sys.argv[1])
video = (sys.argv[2])
# Get key from user
key_ints = input("What is your Key? ")
# Saving line time in this variable
subLineNum = ''
# open file and read it
with open(subtitle, 'r') as open_read:
for line in open_read:
if "<--" in line[0:17] or "-->" in line[0:17]:
subLineNum = line
else:
if key_ints in line:
print(subLineNum)
-
اون کد رو میتونی با این جایگزین کنی:
with open(myaddress) as f:
mysum = len(f.readlines())
مشکل از کدینگ زیرنویس شماست با زیرنویس خودم تست کردم و سالم کار کرد :)
-
سلام بفرمایید اینم برنامه :
#!/bin/python3
# Import needed modules
import sys
import os
import re
# clear Screen
os.system("clear")
# Get Video and Sub from Argument
subtitle = (sys.argv[1])
video = (sys.argv[2])
# Get key from user
key_ints = input("What is your Key? ")
# Saving line time in this variable
subLineNum = ''
# open file and read it
with open(subtitle, 'r') as open_read:
for line in open_read:
if "<--" in line[0:17] or "-->" in line[0:17]:
subLineNum = line
else:
if key_ints in line:
print(subLineNum)
حله ;D مرسی حمیدرضا :)
@GeeK به خاطر وقتی گذاشتید از شما هم تشکر فراوان میکنم :)
-
یه مشکل دیگه هم هست که باید حل بشه... فرض کن ما یه همچین چیزی داشته باشیم:
2
00:00:31,080 --> 00:00:45,067
Well, Neil, we're here to talk about the poetry of science. I would say that science is the
poetry of reality
اگر برای poetry سرچ کنیم چیزی که بر میگرده اینه:
00:00:31,080 --> 00:00:45,067
00:00:31,080 --> 00:00:45,067
دو بار تکرار داریم.
-
خب میتونیم بهش بگیم اگر یه مقدار دوبار تکرار شد فقط دفعهی اول را بده (هر چند هنوز روی کد تست نکردم).
-
راه حل های زیادی هست و نباید مشکلی باشه اما اینکه چطور هوشمندانه بنویسیم مهمه، خودت فکر کنم از عهده اش بربیای. ;)