انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


ارائه ۲۴٫۱۰ اوبونتو منتشر شد 🎉

نویسنده موضوع: فیلتر کردن یک فایل متنی (حل شد)  (دفعات بازدید: 970 بار)

0 کاربر و 2 مهمان درحال مشاهده موضوع.

آفلاین Ma$oud

  • Sr. Member
  • *
  • ارسال: 293
  • جنسیت : پسر
فیلتر کردن یک فایل متنی (حل شد)
« : 20 اسفند 1394، 10:07 ق‌ظ »
سلام دوستان، با چه دستوری میشه مثلا کلمه های موجود توی تگ اچتمل رو کشید بیرون؟ :o
مثال:
<p>hello</p>
<p>hey</p>
<p>masoud</p>
<p>Ma$oud</p>
<p>!!!&</p>
بعد خروجی یه همچین چیزی بشه:
hello
hey
masoud
Ma$oud
!!!&
« آخرین ویرایش: 20 اسفند 1394، 07:36 ب‌ظ توسط Ma$oud »

آفلاین علیرضاامیرصمیمی

  • ناظر انجمن
  • *
  • ارسال: 2489
  • جنسیت : پسر
  • Arch Linux + KDE
    • وبسایت شخصی من
پاسخ : فیلتر کردن یک فایل متنی
« پاسخ #1 : 20 اسفند 1394، 10:51 ق‌ظ »
راه های مختلفی براش هست
فرض کن محتویات رو در یه فایل به نام a.txt
ذخیره کردی . یه دفعه تگ های سمت راست رو حذف کن و یه دفعه سمت چپ

sed -i 's/<\/p>//g' a.txt
 sed -i 's/<p>//g' a.txt

اینجوری خروجی روی همون فایل ذخیره میشه

آفلاین Ma$oud

  • Sr. Member
  • *
  • ارسال: 293
  • جنسیت : پسر
پاسخ : فیلتر کردن یک فایل متنی
« پاسخ #2 : 20 اسفند 1394، 11:19 ق‌ظ »
راه های مختلفی براش هست
فرض کن محتویات رو در یه فایل به نام a.txt
ذخیره کردی . یه دفعه تگ های سمت راست رو حذف کن و یه دفعه سمت چپ

sed -i 's/<\/p>//g' a.txt
 sed -i 's/<p>//g' a.txt

اینجوری خروجی روی همون فایل ذخیره میشه
این در صورتیه که فقط بخوایم تگ <p> رو حذف کنیم، حالا اگه مثلا بخوام از یه فایل اچتمل که همه جور تگ توش هست اطلاعاتو بکشم بیرون چی؟
یه دستوری که بگه مثلا فقط کلماتی که اولشون برای مثال: "> و آخرشون </a رو نشون بده   ;D

آفلاین koosha

  • Hero Member
  • *
  • ارسال: 734
  • جنسیت : پسر
پاسخ : فیلتر کردن یک فایل متنی
« پاسخ #3 : 20 اسفند 1394، 11:22 ق‌ظ »
با تشکر از دوست عزیزمون .
با پایتون هم اینجوری میشه (البته یکمی طولانی شد) :
import re
import string

f=raw_input('Enter the full address of file : ')

file=open(f,'r')
a=file.read()
file.close()

result = re.findall(r'>.*<',a)

result=string.join(result)

result = re.sub(r'[<|>]','',result)

result=string.split(result)

s=len(result)

for i in range(s)  : print result[i] ;


« آخرین ویرایش: 20 اسفند 1394، 11:47 ق‌ظ توسط koosha »
GNU/Linux
Debian8
I3 WM

آفلاین Ma$oud

  • Sr. Member
  • *
  • ارسال: 293
  • جنسیت : پسر
پاسخ : فیلتر کردن یک فایل متنی
« پاسخ #4 : 20 اسفند 1394، 11:36 ق‌ظ »
ممنون آقا کوشا، فقط از اونجایی که من تقریبا اصلا پایتون بلد نیستم  ;D این قسمت <p> و </p> رو به صورت یه متغیری چیزی که من بتونم عوضش کنم درستش کنی؟ و اون قسمت متن رو بشه آدرس فایلو داد؟

آفلاین koosha

  • Hero Member
  • *
  • ارسال: 734
  • جنسیت : پسر
پاسخ : فیلتر کردن یک فایل متنی
« پاسخ #5 : 20 اسفند 1394، 11:46 ق‌ظ »
کد بالا رو ویرایش کردم تا بتونید آدرس فایل رو بهش بدید .
GNU/Linux
Debian8
I3 WM

آفلاین Droid

  • Jr. Member
  • *
  • ارسال: 78
  • جنسیت : پسر
پاسخ : فیلتر کردن یک فایل متنی
« پاسخ #6 : 20 اسفند 1394، 12:31 ب‌ظ »
یه regex نوشتم ولی نمیدونم چرا با sed جواب نمیده، کسی نمیدونه چرا؟
ولی اینی که پیدا کردم کار میکنه:
sed -i -e 's/<[^>]*>//g' html.txt

آفلاین احسان فعالپور

  • Sr. Member
  • *
  • ارسال: 408
  • جنسیت : پسر
پاسخ : فیلتر کردن یک فایل متنی
« پاسخ #7 : 20 اسفند 1394، 01:20 ب‌ظ »
این رجکسی که شما نوشتی کل خط رو شامل میشه به همین خاطر چیزی باقی نمیمونه.
شما نوشتی:
sed -r 's/<\/*.+?>//g' htmlاون کاراکتر . رجکستون رو خراب کرده اینجا، درسته که سعی کردید مشکل حریص بودن رجکس رو با ?+ حل کنید ولی خب کاراکتر . میتونه شامل < هم بشه و اینجا به مشکل میخورید.

بهترین کار استفاده از کتابخانه bs4 در پایتون هستش، اما به هر حال رجکس درست همونطور هم که خودتون اشاره کردید این هستش:

ehsan@ehsan-SVF152190X:~/Desktop/scripting/tmp$ cat html
<p>hello</p>
<p>hey</p>
<p>masoud</p>
<p>Ma$oud</p>
<p>!!!&</p>
ehsan@ehsan-SVF152190X:~/Desktop/scripting/tmp$ sed -r 's/<[^>]+>//g' html
hello
hey
masoud
Ma$oud
!!!&
عضو ارشد فدراسیون بیکاران ایران FBI