ถ้ามีไฟล์อยู่ต้องการหาบางคำใส่ใน list หรือ tuple ทำอย่างไรได้บ้างคะ

  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.
  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.

มี text ไฟล์อยู่ค่ะ เนื้อหาภายในมี

Datum,WGS84,WGS84,0,0,0,0,0
CO,D,Fact, 16.8208, 510.51355,12/31/1989,00:00:00
CO,D,cant, 13.8205, 190.51513,12/31/1989,00:00:00 
CO,D,center, 14.8191, 480.51467,12/31/1989,00:00:00
CO,D,main, 13.81893, 737.514404000,12/31/1989,00:00:00

แล้วต้องการเปรียบเทียบทศนิยมตัวแรกของแต่ละแถวว่าตัวใดมีค่ามากสุด ตัวใดมีค่าน้อยสุด (16.8208,13.8205,14.8191,13.81893(ค่ามากสุดใส่ในตัวแปร xmax น้อยสุดใส่ใน xmin)) และเปรียบเทียบทศนิยมตัวหลังว่าตัวใดมีค่ามากสุดหรือน้อยสุดเช่นเดียวกัน (ใส่ในตัวแปรเช่นกัน) ซึ่งที่คิดไว้ก็คือว่า จะตัดสตริงแล้วเอามาแปลงเป็น float ใส่ใน tuple หรือ list แล้วใช้ฟังก์ชั่น max(tuple) แต่ว่าตอนนี้ยังตัดเอาแค่ทศนิยมแต่ละหลักไม่ได้น่ะค่ะ รบกวนด้วยนะคะ หรือว่าถ้ามีวิธีที่ดีกว่าก็ได้ค่ะ

regex อาจจะเนียน แต่แบบนี้ก็พอไหว

data = open('filename','r').readlines()
value1 = []
value2 = []
for line in data:
    line = line.split(',')
    try:
        value1.append(float(line[3]))
        value2.append(float(line[4]))
    except ValueError:
        pass
min_value1 = min(value1)
min_value2 = min(value2)
max_value1 = max(value1)
max_value2 = max(value2)

เป็นไฟล์ csv นี่ครับ ลองเข้าไปดูเอกสารการใช้ csv ได้ที่ http://docs.python.org/lib/csv-examples.html ครับ

ไฟล์เป็น text file ค่ะ แต่มันมี header เพิ่มขึ้นมา

csv เป็น text file ประเภทหนึ่งครับ ซึ่งมันก็มีรูปร่างอย่างในไฟล์ที่คุณ patricia_c โพสต์เอาไว้ คือใช้เก็บตาราง 1 บรรทัดในไฟล์ก็คือ 1 row ในตาราง แต่ละบรรทัดมีหลาย column แต่ละ column ถูกคั่นด้วย tokenizer ในที่นี้ tokenizer เป็นเครื่องหมายลูกน้ำ

ปล. เพิ่งสังเกตว่าข้อมูลเป็นภาษาเยอรมัน

from csv import reader
 
def get(iters):
    while True:
        try:
            try:
                element = float(iters.next()[3])
            except ValueError:
                element = 0.0
            yield element
        except StopIteration, e:
            break
 
ifloat = get(reader(open('test.csv')))
print max(ifloat)

ขอบคุณค่ะ ทำไ้ด้ผลแ้ล้วค่ะ แต่ว่าทำโดยวิธีการ read แล้ว split แล้วจะได้ tuple ตัวนึง แล้ววนรับค่าใน tuple ที่ได้จากการ split มาเทียบกับ RE ที่กำหนดไว้ ถ้าเท่ากันก็จะเอาค่านั้นใส่ tuple อีกตัว แล้วหาค่า max min ค่ัะ

ย้าย Codenone

ประกาศย้าย Codenone ไปใช้ Forum ของ Blognone แทนครับ ตามไปตั้งกระทู้ต่อได้ที่ Codenone Forum (รายละเอียดอ่านจากกระทู้ ย้าย Codenone ไปรวมกับ Blognone)

กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น