อ่านบรรทัดที่เฉพาะเจาะจงเท่านั้น


215

ฉันกำลังใช้ลูป for เพื่ออ่านไฟล์ แต่ฉันต้องการอ่านเฉพาะบรรทัดพูดบรรทัดที่ 26 และ # 30 มีคุณสมบัติในตัวเพื่อให้บรรลุสิ่งนี้หรือไม่?

ขอบคุณ


1
สำเนาซ้ำที่เป็นไปได้: stackoverflow.com/questions/620367/…
Adam Matan

คำตอบ:


253

หากไฟล์ที่จะอ่านมีขนาดใหญ่และคุณไม่ต้องการอ่านไฟล์ทั้งหมดในหน่วยความจำพร้อมกัน:

fp = open("file")
for i, line in enumerate(fp):
    if i == 25:
        # 26th line
    elif i == 29:
        # 30th line
    elif i > 29:
        break
fp.close()

โปรดทราบว่าi == n-1สำหรับnบรรทัดที่


ใน Python 2.6 หรือใหม่กว่า:

with open("file") as fp:
    for i, line in enumerate(fp):
        if i == 25:
            # 26th line
        elif i == 29:
            # 30th line
        elif i > 29:
            break

8
enumerate(x)ใช้x.nextดังนั้นจึงไม่จำเป็นต้องใช้ไฟล์ทั้งหมดในหน่วยความจำ
Alok Singhal

3
เนื้อขนาดเล็กของฉันมีสิ่งนี้คือ A) คุณต้องการใช้กับคู่เปิด / ปิดและทำให้ร่างกายสั้น B) แต่ร่างกายไม่สั้น ฟังดูเหมือนเป็นการแลกเปลี่ยนระหว่างความเร็ว / พื้นที่กับการเป็น Pythonic ฉันไม่แน่ใจว่าทางออกที่ดีที่สุดจะเป็นอย่างไร
Hamish Grubijan

5
ที่มีอยู่ใน overrated หลามกันได้ดีมานานกว่า 13 ปีโดยไม่ได้
แดน D.

38
@Dan D. การใช้ไฟฟ้าเกินความเป็นจริงมนุษย์ก็ดีมานานกว่า 200,000 ปีโดยที่ไม่มีมัน ;-) 'with' ทำให้ความปลอดภัยมากขึ้นอ่านได้ง่ายขึ้นและสั้นลงหนึ่งบรรทัด
Romain Vincent

9
big fileเหตุผลที่ใช้สำหรับวงผมไม่คิดว่าคุณเข้าใจความหมายของ การวนซ้ำจะใช้เวลาหลายปีกว่าจะถึงดัชนี
devssh

159

คำตอบอย่างรวดเร็ว:

f=open('filename')
lines=f.readlines()
print lines[25]
print lines[29]

หรือ:

lines=[25, 29]
i=0
f=open('filename')
for line in f:
    if i in lines:
        print i
    i+=1

มีโซลูชันที่หรูหรากว่าสำหรับการแยกหลายบรรทัด: linecache (ความอนุเคราะห์ของ"หลาม: วิธีการข้ามไปที่บรรทัดเฉพาะในไฟล์ข้อความขนาดใหญ่?"คำถาม stackoverflow.com ก่อนหน้านี้)

การอ้างถึงเอกสารหลามที่ลิงก์ด้านบน:

>>> import linecache
>>> linecache.getline('/etc/passwd', 4)
'sys:x:3:3:sys:/dev:/bin/sh\n'

เปลี่ยน 4หมายเลขบรรทัดที่คุณต้องการและคุณเปิด โปรดทราบว่า 4 จะนำบรรทัดที่ห้าเนื่องจากการนับเป็นศูนย์

หากไฟล์อาจมีขนาดใหญ่มากและทำให้เกิดปัญหาเมื่ออ่านในหน่วยความจำอาจเป็นคำแนะนำที่ดีที่@ Alok แนะนำและใช้ enumerate ()()

สรุป:

  • ใช้fileobject.readlines()หรือfor line in fileobjectเป็นวิธีแก้ปัญหาอย่างรวดเร็วสำหรับไฟล์ขนาดเล็ก
  • ใช้ linecacheสำหรับโซลูชันที่หรูหรากว่าซึ่งจะค่อนข้างเร็วสำหรับการอ่านไฟล์จำนวนมาก
  • ใช้@ คำแนะนำ Alok และใช้enumerate()สำหรับไฟล์ซึ่งอาจจะมีขนาดใหญ่มากและจะไม่พอดีในหน่วยความจำ โปรดทราบว่าการใช้วิธีนี้อาจช้าเพราะอ่านไฟล์ตามลำดับ

7
ดี ฉันเพิ่งดูที่มาของlinecacheโมดูลและดูเหมือนว่าจะอ่านไฟล์ทั้งหมดในหน่วยความจำ ดังนั้นหากการเข้าถึงแบบสุ่มสำคัญกว่าการปรับขนาดให้เหมาะสมlinecacheเป็นวิธีที่ดีที่สุด
Alok Singhal

7
ด้วย linecache.getlin ('some_file', 4) ฉันได้บรรทัดที่ 4 ไม่ใช่บรรทัดที่ 5
Juan

ข้อเท็จจริงที่สนุกสนาน: ถ้าคุณใช้ชุดแทนที่จะเป็นรายการในตัวอย่างที่สองคุณจะได้ O (1) ค้นหาในรายการคือ O (n) ชุดภายในจะถูกแทนด้วยแฮชและนั่นเป็นเหตุผลว่าทำไมคุณถึงได้เวลา O (1) ไม่ใช่เรื่องใหญ่ในตัวอย่างนี้ แต่ถ้าใช้ตัวเลขจำนวนมากและใส่ใจเกี่ยวกับประสิทธิภาพชุดก็เป็นหนทางที่จะไป
rady

linecacheตอนนี้ดูเหมือนว่าจะทำงานเฉพาะกับไฟล์ต้นฉบับของไพ ธ อน
Paul H

คุณยังสามารถใช้linecache.getlines('/etc/passwd')[0:4]อ่านในบรรทัดแรก, สอง, สามและสี่
zyy

30

วิธีที่รวดเร็วและกะทัดรัดอาจเป็น:

def picklines(thefile, whatlines):
  return [x for i, x in enumerate(thefile) if i in whatlines]

สิ่งนี้ยอมรับออบเจ็กต์ที่มีลักษณะเหมือนไฟล์ใด ๆthefile(ปล่อยให้ผู้โทรทราบว่าควรจะเปิดจากไฟล์ดิสก์หรือผ่านทางซ็อกเก็ตหรือสตรีมไฟล์อื่น ๆ ) และชุดของดัชนีบรรทัดตามศูนย์whatlinesและส่งกลับค่า รายการที่มีหน่วยความจำต่ำและความเร็วที่เหมาะสม หากจำนวนบรรทัดที่จะส่งคืนมีขนาดใหญ่มากคุณอาจต้องการเครื่องกำเนิดไฟฟ้า:

def yieldlines(thefile, whatlines):
  return (x for i, x in enumerate(thefile) if i in whatlines)

ซึ่งโดยทั่วไปดีสำหรับการวนรอบเท่านั้น - โปรดทราบว่าความแตกต่างเพียงอย่างเดียวนั้นมาจากการใช้การปัดเศษมากกว่าวงเล็บเหลี่ยมในreturnคำสั่งทำให้เข้าใจรายการและนิพจน์เครื่องกำเนิดไฟฟ้าตามลำดับ

ทราบเพิ่มเติมว่าแม้จะมีการกล่าวถึง "เส้น" และ "ไฟล์" ฟังก์ชั่นเหล่านี้มีมากมากมากขึ้นทั่วไป - พวกเขาจะทำงานในใด ๆ iterable ไม่ว่าจะเป็นเปิดไฟล์หรืออื่น ๆ กลับรายการ (หรือเครื่องกำเนิดไฟฟ้า) ของรายการ ขึ้นอยู่กับหมายเลขรายการก้าวหน้าของพวกเขา ดังนั้นฉันขอแนะนำให้ใช้ชื่อสามัญที่เหมาะสมกว่า ;-)


@ephemient ฉันไม่เห็นด้วย - genexp อ่านได้อย่างราบรื่นและสมบูรณ์แบบ
Alex Martelli

โซลูชั่นที่ยอดเยี่ยมและสง่างามขอบคุณ! แน่นอนควรสนับสนุนไฟล์ขนาดใหญ่ด้วยนิพจน์ตัวสร้าง ไม่สามารถสวยได้มากกว่านี้ใช่ไหม :)
ซามูเอลแลมปา

วิธีแก้ปัญหาที่ดีสิ่งนี้เปรียบเทียบกับที่เสนอโดย @AdamMatan อย่างไร วิธีแก้ปัญหาของอดัมอาจเร็วขึ้นเนื่องจากใช้ประโยชน์จากข้อมูลเพิ่มเติม (หมายเลขบรรทัดที่เพิ่มขึ้นอย่างน่าเบื่อ) ซึ่งอาจนำไปสู่การหยุดก่อน ฉันมีไฟล์ 10GB ซึ่งไม่สามารถโหลดลงในหน่วยความจำได้
Mannaggia

2
@ Managgia มันไม่ได้เน้นมากในคำตอบนี้ แต่whatlinesควรจะเป็นsetเพราะif i in whatlinesจะทำงานได้เร็วขึ้นด้วยชุดมากกว่ารายการ (เรียงลำดับ) ฉันไม่ได้สังเกตมันก่อนและคิดค้นวิธีการแก้ปัญหาที่น่าเกลียดของตัวเองด้วยรายการที่เรียงลำดับ (ซึ่งฉันไม่ต้องสแกนรายการทุกครั้งในขณะที่if i in whatlinesทำแบบนั้น) แต่ความแตกต่างของประสิทธิภาพนั้นเล็กน้อย (กับข้อมูลของฉัน) และสิ่งนี้ วิธีการแก้ปัญหามีความสง่างามมากขึ้น
Victor K

28

เพื่อเสนอวิธีแก้ปัญหาอื่น:

import linecache
linecache.getline('Sample.txt', Number_of_Line)

ฉันหวังว่านี่จะง่ายและรวดเร็ว :)


1
หวังว่านี่เป็นทางออกที่ดีที่สุด
maniac_user

2
นี่จะอ่านไฟล์ทั้งหมดในหน่วยความจำ คุณเช่นกันอาจจะเรียก file.read () แยก ( '\ n') จากนั้นใช้การค้นหาดัชนีอาร์เรย์ที่จะได้รับสายที่น่าสนใจ ... .
duhaime

คุณช่วยยกตัวอย่าง @duhaime
อานนท์

14

ถ้าคุณต้องการบรรทัด 7

บรรทัด = open ("file.txt", "r"). readlines () [7]

14
เรียบร้อย แต่คุณจะclose()เปิดไฟล์ด้วยวิธีนี้ได้อย่างไร?
Milo Wielondek

1
@ 0sh เราจำเป็นต้องปิดหรือไม่
Ooker

1
ใช่. เราจำเป็นต้องปิดหลังจากนี้เมื่อเราเปิดไฟล์โดยใช้ "กับ" ... มันจะปิดตัวเอง
reetesh11

10

เพื่อความสมบูรณ์นี่คืออีกหนึ่งทางเลือก

เริ่มจากนิยามของpython docsกันดีกว่า:

ชิ้นมักจะมีชิ้นส่วนของลำดับ ชิ้นถูกสร้างขึ้นโดยใช้สัญกรณ์ห้อย [] กับ colons ระหว่างตัวเลขเมื่อได้รับหลายอย่างเช่นใน variable_name [1: 3: 5] เครื่องหมายวงเล็บ (ห้อย) ใช้วัตถุชิ้นภายใน (หรือในรุ่นเก่ากว่า, __getslice __ () และ __setslice __ ())

แม้ว่าสัญกรณ์สไลซ์จะไม่สามารถใช้ได้โดยตรงกับตัววนซ้ำโดยทั่วไปitertoolsแพ็คเกจบรรจุฟังก์ชันการแทนที่

from itertools import islice

# print the 100th line
with open('the_file') as lines:
    for line in islice(lines, 99, 100):
        print line

# print each third line until 100
with open('the_file') as lines:
    for line in islice(lines, 0, 100, 3):
        print line

ข้อดีเพิ่มเติมของฟังก์ชั่นคือมันไม่ได้อ่านตัววนซ้ำจนกว่าจะสิ้นสุด ดังนั้นคุณสามารถทำสิ่งที่ซับซ้อนมากขึ้น:

with open('the_file') as lines:
    # print the first 100 lines
    for line in islice(lines, 100):
        print line

    # then skip the next 5
    for line in islice(lines, 5):
        pass

    # print the rest
    for line in lines:
        print line

และเพื่อตอบคำถามเดิม:

# how to read lines #26 and #30
In [365]: list(islice(xrange(1,100), 25, 30, 4))
Out[365]: [26, 30]

1
โดยวิธีการที่ดีที่สุดเมื่อทำงานกับไฟล์ขนาดใหญ่ โปรแกรมของฉันเปลี่ยนจากการกิน 8GB + ไปเป็นเกือบทุกอย่าง tradoff คือการใช้งาน CPU ซึ่งเพิ่มขึ้นจาก ~ 15% ถึง ~ 40% แต่การประมวลผลที่แท้จริงของไฟล์นั้นเร็วขึ้น 70% ฉันจะใช้ tradoff ที่ตลอดทั้งวัน ขอบคุณ! 🎉🎉🎉
GollyJer

1
นี่ดูเหมือนจะเป็นเสียงที่ไพเราะที่สุดสำหรับฉัน ขอบคุณ!
ipetrik

10

การอ่านไฟล์เป็นไปอย่างรวดเร็วอย่างไม่น่าเชื่อ การอ่านไฟล์ 100MB ใช้เวลาน้อยกว่า 0.1 วินาที (ดูบทความการอ่านและเขียนไฟล์ของฉันด้วย Python ) ดังนั้นคุณควรอ่านให้ครบถ้วนและทำงานกับบรรทัดเดียว

คำตอบส่วนใหญ่ที่นี่ทำไม่ผิด แต่สไตล์ไม่ดี การเปิดไฟล์ควรทำด้วยเสมอwithเพราะทำให้แน่ใจว่าไฟล์นั้นถูกปิดอีกครั้ง

ดังนั้นคุณควรทำเช่นนี้:

with open("path/to/file.txt") as f:
    lines = f.readlines()
print(lines[26])  # or whatever you want to do with this line
print(lines[30])  # or whatever you want to do with this line

ไฟล์ขนาดใหญ่

หากคุณมีไฟล์จำนวนมากและการใช้หน่วยความจำเป็นเรื่องที่กังวลคุณสามารถประมวลผลทีละบรรทัด:

with open("path/to/file.txt") as f:
    for i, line in enumerate(f):
        pass  # process line i

IMO มันเป็นสไตล์ที่แย่มาก ๆ ในการอ่านไฟล์ความยาวที่ไม่รู้จักทั้งหมดเพียงเพื่อรับ 30 บรรทัดแรก .. สิ่งที่เกี่ยวกับการใช้หน่วยความจำ .. และอะไรที่เกี่ยวกับการสตรีมไม่รู้จบ
return42

@ return42 มันขึ้นอยู่กับแอพพลิเคชั่นเป็นอย่างมาก สำหรับหลาย ๆ คนก็ถือว่าดีโดยสมบูรณ์ที่จะสมมติว่าไฟล์ข้อความมีขนาดที่เล็กกว่าหน่วยความจำที่มีอยู่ หากคุณมีไฟล์ขนาดใหญ่ที่อาจเกิดขึ้นฉันได้แก้ไขคำตอบของฉัน
Martin Thoma

ขอบคุณสำหรับการเพิ่มของคุณซึ่งเป็นเช่นเดียวกับ Alok คำตอบ และขอโทษที่ฉันไม่คิดว่าสิ่งนี้ขึ้นอยู่กับแอปพลิเคชัน IMO มันจะดีกว่าเสมอหากไม่อ่านบรรทัดเพิ่มแล้วคุณต้องการ
return42

7

สิ่งเหล่านี้น่ารัก แต่ก็สามารถทำได้ง่ายกว่า:

start = 0 # some starting index
end = 5000 # some ending index
filename = 'test.txt' # some file we want to use

with open(filename) as fh:
    data = fin.readlines()[start:end]

print(data)

นั่นจะใช้การแบ่งรายการแบบง่ายๆโหลดไฟล์ทั้งหมด แต่ระบบส่วนใหญ่จะลดการใช้หน่วยความจำอย่างเหมาะสมมันเร็วกว่าวิธีการส่วนใหญ่ที่ระบุด้านบนและทำงานกับไฟล์ข้อมูล 10G + ของฉัน โชคดี!


4

คุณสามารถทำการเรียก()โทรซึ่งวางตำแหน่งหัวอ่านของคุณไปยังไบต์ที่ระบุภายในไฟล์ สิ่งนี้จะไม่ช่วยคุณจนกว่าคุณจะรู้จำนวนไบต์ (ตัวอักษร) ที่เขียนในไฟล์ก่อนที่คุณจะอ่าน บางทีไฟล์ของคุณมีการจัดรูปแบบอย่างเข้มงวด (แต่ละบรรทัดคือ X จำนวนไบต์?) หรือคุณสามารถนับจำนวนอักขระด้วยตัวคุณเอง (อย่าลืมใส่อักขระที่มองไม่เห็นเช่นตัวแบ่งบรรทัด) หากคุณต้องการเร่งความเร็ว

มิฉะนั้นคุณจะต้องอ่านทุกบรรทัดก่อนถึงบรรทัดที่คุณต้องการตามหนึ่งในวิธีแก้ปัญหามากมายที่เสนอไว้แล้วที่นี่


3

หากไฟล์ข้อความขนาดใหญ่ของคุณมีfileโครงสร้างที่ดีอย่างเข้มงวด (หมายถึงทุกบรรทัดมีความยาวเท่ากันl) คุณสามารถใช้สำหรับnบรรทัดที่ -th

with open(file) as f:
    f.seek(n*l)
    line = f.readline() 
    last_pos = f.tell()

ข้อจำกัดความรับผิดชอบนี่ใช้งานได้กับไฟล์ที่มีความยาวเท่ากัน!


2

เกี่ยวกับสิ่งนี้:

>>> with open('a', 'r') as fin: lines = fin.readlines()
>>> for i, line in enumerate(lines):
      if i > 30: break
      if i == 26: dox()
      if i == 30: doy()

ทรูนี้จะมีประสิทธิภาพน้อยกว่าหนึ่งโดย Alok แต่เหมืองใช้กับคำสั่ง;)
Hamish Grubijan


2
def getitems(iterable, items):
  items = list(items) # get a list from any iterable and make our own copy
                      # since we modify it
  if items:
    items.sort()
    for n, v in enumerate(iterable):
      if n == items[0]:
        yield v
        items.pop(0)
        if not items:
          break

print list(getitems(open("/usr/share/dict/words"), [25, 29]))
# ['Abelson\n', 'Abernathy\n']
# note that index 25 is the 26th item

โรเจอร์คนที่ฉันชอบ! สิ่งนี้จะได้ประโยชน์จากคำสั่ง with
Hamish Grubijan

2

ผมชอบวิธีนี้เพราะมันมากขึ้นวัตถุประสงค์ทั่วไปคือคุณสามารถใช้ในแฟ้มผลการf.readlines()บนStringIOวัตถุสิ่ง:

def read_specific_lines(file, lines_to_read):
   """file is any iterable; lines_to_read is an iterable containing int values"""
   lines = set(lines_to_read)
   last = max(lines)
   for n, line in enumerate(file):
      if n + 1 in lines:
          yield line
      if n + 1 > last:
          return

>>> with open(r'c:\temp\words.txt') as f:
        [s for s in read_specific_lines(f, [1, 2, 3, 1000])]
['A\n', 'a\n', 'aa\n', 'accordant\n']

2

นี่คือ 2 เซ็นต์เล็ก ๆ ของฉันสำหรับสิ่งที่คุ้มค่า;)

def indexLines(filename, lines=[2,4,6,8,10,12,3,5,7,1]):
    fp   = open(filename, "r")
    src  = fp.readlines()
    data = [(index, line) for index, line in enumerate(src) if index in lines]
    fp.close()
    return data


# Usage below
filename = "C:\\Your\\Path\\And\\Filename.txt"
for line in indexLines(filename): # using default list, specify your own list of lines otherwise
    print "Line: %s\nData: %s\n" % (line[0], line[1])

2

การเปลี่ยนแปลงที่ดีขึ้นเล็กน้อยสำหรับคำตอบของ Alok Singhal

fp = open("file")
for i, line in enumerate(fp,1):
    if i == 26:
        # 26th line
    elif i == 30:
        # 30th line
    elif i > 30:
        break
fp.close()

1

วัตถุไฟล์มีวิธีการ .readlines () ซึ่งจะให้รายชื่อของเนื้อหาของไฟล์หนึ่งบรรทัดต่อรายการรายการ หลังจากนั้นคุณสามารถใช้เทคนิคการแบ่งรายการแบบปกติได้

http://docs.python.org/library/stdtypes.html#file.readlines



1
file = '/path/to/file_to_be_read.txt'
with open(file) as f:
    print f.readlines()[26]
    print f.readlines()[30]

การใช้คำสั่ง with จะเป็นการเปิดไฟล์พิมพ์บรรทัดที่ 26 และ 30 จากนั้นปิดไฟล์ ! ง่าย


นี่ไม่ใช่คำตอบที่ถูกต้อง หลังจากการเรียกครั้งแรกไปยังreadlines()ตัววนซ้ำจะหมดลงและการโทรครั้งที่สองจะส่งคืนรายการว่างเปล่าหรือโยนข้อผิดพลาด (จำไม่ได้ว่าใคร)
พอล H

1

คุณสามารถทำสิ่งนี้ได้ง่าย ๆ ด้วยซินแท็กซ์นี้ที่มีคนพูดถึงไปแล้ว

inputFile = open("lineNumbers.txt", "r")
lines = inputFile.readlines()
print (lines[0])
print (lines[2])

1

หากต้องการพิมพ์บรรทัด # 3

line_number = 3

with open(filename,"r") as file:
current_line = 1
for line in file:
    if current_line == line_number:
        print(file.readline())
        break
    current_line += 1

ผู้แต่งต้นฉบับ: Frank Hofmann


1

ค่อนข้างรวดเร็วและตรงประเด็น

หากต้องการพิมพ์บางบรรทัดในไฟล์ข้อความ สร้างรายการ "lines2print" จากนั้นเพียงพิมพ์เมื่อการแจงนับคือ "ใน" รายการ lines2print หากต้องการกำจัด '\ n' พิเศษให้ใช้ line.strip () หรือ line.strip ('\ n') ฉันชอบ "list comprehension" และพยายามใช้เมื่อฉันสามารถ ฉันชอบวิธีการ "กับ" ในการอ่านไฟล์ข้อความเพื่อป้องกันการเปิดไฟล์ไม่ว่าด้วยเหตุผลใด

lines2print = [26,30] # can be a big list and order doesn't matter.

with open("filepath", 'r') as fp:
    [print(x.strip()) for ei,x in enumerate(fp) if ei in lines2print]

หรือถ้ารายการมีขนาดเล็กเพียงพิมพ์ในรายการเป็นรายการลงในความเข้าใจ

with open("filepath", 'r') as fp:
    [print(x.strip()) for ei,x in enumerate(fp) if ei in [26,30]]

0

เพื่อพิมพ์บรรทัดที่ต้องการ หากต้องการพิมพ์บรรทัดด้านบน / ด้านล่างบรรทัดที่ต้องการ

def dline(file,no,add_sub=0):
    tf=open(file)
    for sno,line in enumerate(tf):
        if sno==no-1+add_sub:
         print(line)
    tf.close()

ดำเนินการ ----> dline ("D: \ dummy.txt", 6) คือ dline ("พา ธ ไฟล์", line_number ถ้าคุณต้องการให้บรรทัดบนของบรรทัดการค้นหาให้ 1 สำหรับต่ำกว่า -1 นี่คือค่าเริ่มต้นที่ไม่จำเป็น จะต้องดำเนินการ 0)


0

หากคุณต้องการอ่านบรรทัดที่เฉพาะเจาะจงเช่นบรรทัดที่เริ่มต้นหลังจากบรรทัดเกณฑ์บางบรรทัดคุณสามารถใช้รหัสต่อไปนี้ file = open("files.txt","r") lines = file.readlines() ## convert to list of lines datas = lines[11:] ## raed the specific lines


-1
f = open(filename, 'r')
totalLines = len(f.readlines())
f.close()
f = open(filename, 'r')

lineno = 1
while lineno < totalLines:
    line = f.readline()

    if lineno == 26:
        doLine26Commmand(line)

    elif lineno == 30:
        doLine30Commmand(line)

    lineno += 1
f.close()

7
นี่เป็นเสียงไพเราะเท่าที่ได้รับ
SilentGhost

ให้ผลลัพธ์ที่ผิดเนื่องจากคุณไม่สามารถใช้ readlines และ readline แบบนั้น (พวกเขาแต่ละคนเปลี่ยนตำแหน่งการอ่านปัจจุบัน)

ฉันขอโทษที่มองข้ามข้อผิดพลาดขนาดใหญ่ในรหัสแรกของฉัน ข้อผิดพลาดได้รับการแก้ไขและรหัสปัจจุบันควรทำงานตามที่คาดไว้ ขอบคุณที่ชี้ให้เห็นข้อผิดพลาดของฉัน Roger Pate
inspectorG4dget

-1

ฉันคิดว่ามันจะใช้ได้

 open_file1 = open("E:\\test.txt",'r')
 read_it1 = open_file1.read()
 myline1 = []
 for line1 in read_it1.splitlines():
 myline1.append(line1)
 print myline1[0]

มีวิธี readline เป็นโหลอยู่แล้วเมื่อคุณโพสต์สิ่งนี้ - เพิ่มอีกวิธีเพิ่มความยุ่งเหยิง
duhaime
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.