انجمنهای فارسی اوبونتو
کمک و پشتیبانی => نرمافزارهای فنی-مهندسی => نویسنده: oostaa در 03 آبان 1394، 06:26 بظ
-
سلام دوستای گلم .
من تو اوبونتو میخوام کارایی که تو پایین اوردمو روی یه فایل تکست که 5تا ستون و 100000 تا ردیف داره انجام بدم . اونطوری که فهمیدم این کارا رو پایتون میتونه راحت انجام بده . اگه کسی بتونه کمکم کنه ازش حسابی ممنون میشم . #-
1.سطرهایی که ستون دومشان برابر است با 1 حذف شوند.
2. از سطرهای باقیمانده ،فقط 4000 تا سطر باقی بمانند و بقیه حذف شوند.
3.از بین سطرهایی که باقی مانده اند،سطری که ردیف پنجم آن بیشترین مقدار را دارد ،انتخاب و نمایش داده شود .
4.عدد ستون اول سطری که در گام 3 همین الگوریتم انتخاب شد منهای 4000 شود و نتیجه نمایش داده شود .
ممنونم ازتون . بسیار.
-
میتونید از ابزار های خط فرمان استفاده کنید .
اینها ابزار هایی هستند که میتونند کمکتون بکنند :
cut , tail ,
-
میشه یه نمونهٔ کوچیک از فایلی رو که میفرمایید ضمیمه کنید؟ اینطوری راحتتر میشه برنامه رو نوشت.
-
به زبان فنگلیش بنویس هیچی نفهمیدم. یا اعداد رو به حروف بنویس
-
میشه یه نمونهٔ کوچیک از فایلی رو که میفرمایید ضمیمه کنید؟ اینطوری راحتتر میشه برنامه رو نوشت.
یه نمونه از فایل به شکل زیره :
1 1 0 0 0
2 1 0.358 0.123 1
3 2 0.963 1 0.526
4 1 0.259 0.213 0.140
5 2 0.159 0.351 0.256
6 2 0.258 0.036 0.321
7 2 0.142 1.200 0.651
8 1 0.359 0.142 0.395
9 1 0.126 0.263 0.259
10 1 0.490 0.891 0.984
...
خود فایل حدود هفتاد گیگه . ](*,)
-
برای جدا کردن اول از \n برای خطوط و از دوتا فاصله برای مقادیر سطرها استفاده کن. (حتماً میدونی که تابع جداکردن splitـه…) و با دوتا حلقه که یکی توی اون یکیه پیمایش کن و دیگه بقیهش کاری نداره.
-
برای جدا کردن اول از \n برای خطوط و از دوتا فاصله برای مقادیر سطرها استفاده کن. (حتماً میدونی که تابع جداکردن splitـه…) و با دوتا حلقه که یکی توی اون یکیه پیمایش کن و دیگه بقیهش کاری نداره.
حسین اخه قضیه اینه که من اولین باریه که کارم به پایتون افتاده . و مشکل اینجاس که کارم عجله ایه و فرصت یادگرفتنشو هم ندارم . سریع باید به استاد گزارش داده ها رو بدم . وگرنه خودمم دوس دارم که پایتون یاد بگیرم . این چیزی که گفتی من ازش سر در نمیارم . متاسفانه . میشه بیشتر توضیح بدی ؟ممنونم ازت . ](*,)
-
نگید کمک کوچولی چند خطی.
این یعنی کاری که برنامه نویس واستون انجام میده کوچولو هست و ارزش چندانی نداره.
البته این نظر منه.
-
نگید کمک کوچولی چند خطی.
این یعنی کاری که برنامه نویس واستون انجام میده کوچولو هست و ارزش چندانی نداره.
البته این نظر منه.
فاروق عزیز منظورم کوچیک بودن برنامه س . نه کوچیک بودن ارزش کار بچه ها . هر کسیکه به من کمک کنه قطعا منو مدیون خودش کرده . بدون شک .
اما به خاطر اینکه سو برداشت نشه تیتر سوالو عوض میکنم . ;)
-
i = 0
max_num = 0
output = open('out.txt', 'w')
for line in open('file.txt'):
s1, s2, s3, s4, s5, *tail = map(float, line.split())
if s2 == 1: continue
i += 1
if i == 4000: break
if s5 > max_num:
max_num = s5
found_line = line
output.write(line)
output.close()
print('OUT3:', found_line.rstrip())
chu = found_line.split()
print('OUT4:', float(chu[0]) - 4000)
ورودی file.txt
خروجی out.txt
برای اون داده هایی که گذاشتید خروجی برنامه:
OUT3: 7 2 0.142 1.200 0.651
OUT4: -3993.0
و محتویات out.txt
3 2 0.963 1 0.526
5 2 0.159 0.351 0.256
6 2 0.258 0.036 0.321
7 2 0.142 1.200 0.651
-
i = 0
max_num = 0
output = open('out.txt', 'w')
for line in open('file.txt'):
s1, s2, s3, s4, s5, *tail = map(float, line.split())
if s2 == 1: continue
i += 1
if i == 4000: break
if s5 > max_num:
max_num = s5
found_line = line
output.write(line)
output.close()
print('OUT3:', found_line.rstrip())
chu = found_line.split()
print('OUT4:', float(chu[0]) - 4000)
ورودی file.txt
خروجی out.txt
برای اون داده هایی که گذاشتید خروجی برنامه:
OUT3: 7 2 0.142 1.200 0.651
OUT4: -3993.0
و محتویات out.txt
3 2 0.963 1 0.526
5 2 0.159 0.351 0.256
6 2 0.258 0.036 0.321
7 2 0.142 1.200 0.651
احمد اقا ممنونم ازت . خیلی خیلی لطف کردی. دمت گرم .
-
خواننده تیتر رو میبینه نه دلت رو.
خوبه حالا سوء برداشت نمیشه.
-
سلام اقای حمزه ئی
کد بالایی رو همه ی فایلا کار میکنه اما برا بعضی از اونا خطا میده . نمونه ی فایلو زیر همین جا اپلود کردم .
خطاش به صورت زیره :
mhmud@mhmud-X55VD:~/Desktop/python$ python3 p.py
Traceback (most recent call last):
File "p.py", line 20, in <module>
print('OUT3:', found_line.rstrip())
NameError: name 'found_line' is not defined
فک میکنید مشکل کجاس ؟ بازم ممنون .
-
لابد توی یکی از سطر ها تون ۵امی وجود نداره
-
لابد توی یکی از سطر ها تون ۵امی وجود نداره
فک نمیکنم . چون این فایل توسط نرم افزار شبیه سازی ایجاد شده .
-
خب با اجازه آقای حمزه ئی، من کد رو اینجوری تغییر دادم و الان دیگه مشکلش حل شده:
#!/usr/bin/python3.5
i=0
max_num=0
output=open('out.txt','w')
line_number=0
for l in open('./file.txt'):
line_number+=1
try:
s1,s2,s3,s4,s5,*tail=map(float,l.split())
if s2==1:
continue
i+=1
if i==4000:
break
if s5>max_num:
max_num=s5
found_line=l
output.write('line number in original file:'+str(line_number)+'\tData:'+found_line)
except ValueError:
print('error while reading line',line_number)
output.close()
print('out3:',found_line.rstrip())
ch=found_line.split()
print('out4:',float(ch[0])-4000)
این اصل فایله:
ehsan@ehsan-SVF152190X:~/Desktop/python$ cat -n file.txt |tail
2691 7049 2 168.96 105.6 3.52
2692 7050 2 172.48 105.6 3.52
2693 7051 2 176 105.6 3.52
2694 7052 2 179.52 105.6 3.52
2695 7053 2 183.04 105.6 3.52
2696 7054 2 186.56 105.6 3.52
2697 7055 2 190.08 105.6 3.52
2698 7056 2 193.6 105.6 3.52
2699 7057 2 197.12 105.6 3.52
2700
و اینم نتایج:
ehsan@ehsan-SVF152190X:~/Desktop/python$ ./simple.py
error while reading line 2700
out3: 4901 2 0 0 3.52
out4: 901.0
محتویات فایل خروجی:
ehsan@ehsan-SVF152190X:~/Desktop/python$ cat out.txt
line number in original file:543 Data:4901 2 0 0 3.52
البته الان فهمیدم یه سوتی هم دادم که اون این بود که اون خطی که اطلاعات رو توی فایل خروجی مینوشت باید میرفت داخل if آخر.(الان دیگه کد درسته)
-
واقعا کیف کردم . دمت گرم . یه چیزی میگم از ته دل ، بادیدن ادمایی مثل شما و اقای حمزئی، ادمیزاد کلی به برنامه نویسی علاقه پیدا میکنه .
;)