कैसे एक स्ट्रिंग चर में एक पाठ फ़ाइल पढ़ने के लिए और newlines पट्टी?


961

मैं अजगर में एक फ़ाइल को पढ़ने के लिए निम्नलिखित कोड खंड का उपयोग करता हूं:

with open ("data.txt", "r") as myfile:
    data=myfile.readlines()

इनपुट फ़ाइल है:

LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN
GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE

और जब मैं डेटा प्रिंट करता हूं तो मुझे मिलता है

['LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN\n', 'GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE']

जैसा कि मैं देख रहा हूं कि डेटा listफॉर्म में है। मैं इसे कैसे बनाऊं? और यह भी कि कैसे मैं निकालूँ "\n", "["है, और "]"यह से पात्रों?



7
शीर्षक और प्रश्न असंगत है। क्या आप वास्तव में \ n से छुटकारा पाना चाहते हैं?
जूलियन

2
क्या आप वास्तव में फ़ाइल / स्ट्रिंग सामग्री से नई सूची निकालना चाहते हैं, या क्या आप अपने प्रिंट आउटपुट में कई मेटा-वर्णों के बारे में उलझन में हैं और वास्तव में नई सूची रखना चाहते हैं, लेकिन क्या उन्हें "\ n" के रूप में प्रदर्शित नहीं किया गया है?
मेनागेल

10
एक खोज इंजन से यहां आने वालों के लिए, आप शायद @ xiaoyu के उत्तर की तलाश कर रहे हैं
जोनाथन सुदियामैन

जवाबों:


1316

आप उपयोग कर सकते हैं:

with open('data.txt', 'r') as file:
    data = file.read().replace('\n', '')

66
क्या open("data.txt").read().replace('\n','')इसके बजाय सिर्फ लिखने में एक नकारात्मक पहलू है ?
तुमासालो

262
हां, आपका संस्करण स्पष्ट रूप से फ़ाइल को बंद नहीं करता है, तब तब तक देरी हो जाएगी जब तक कि कचरा कलेक्टर नहीं चलता या कार्यक्रम समाप्त नहीं हो जाता। 'स्टेटमेंट' के साथ आमतौर पर कुछ सेटअप / टैडडाउन ओपन / क्लोज एक्शन इनकैप्सुलेट होते हैं।
स्लीपलेसनरड

12
स्पष्टीकरण के लिए धन्यवाद। इसलिए, ऐसा लगता है कि मेरा संस्करण छोटी लिपियों के लिए ठीक हो सकता है - लेकिन OTOH को अधिमानतः इसे एक आदत न बनाने के लिए पूरी तरह से बचा जाना चाहिए।
तूयमासालो

10
@tuomassalo यह परीक्षण / डिबग प्रक्रिया में एक बहुत बड़ा PITA है, क्योंकि यदि आप समय से पहले समाप्त करना चाहते हैं या यह एक अपवाद के रूप में चलता है, तो यह खुले फ़ाइल हैंडल को साफ नहीं करेगा।
गोइंगथर्न

13
नहीं है, rstrip('\n')केवल अंतिम पंक्ति से न्यू लाइन निकाल देंगे, replace('\n','')हर जगह उसे निकाल देता है (अनिवार्य रूप से पूरी फ़ाइल एक लाइन बनाने)
sleeplessnerd

630

उपयोग करें read(), नहीं readline():

with open('data.txt', 'r') as myfile:
  data = myfile.read()

6
शायद, लेकिन यह ओपी चाहता था के रूप में newlines पट्टी नहीं करता है। हालांकि अभी भी मुझे यही पसंद है।
रान्डेल कुक

60
यदि आप एक सिंगल स्ट्रिंग लौटा रहे हैं, तो नएपन को अलग करने का कोई मतलब नहीं है - ओपी को सूची में स्ट्रिंग से एक स्ट्रिंग या स्ट्रिप्ड \ n चुनना चाहिए।
एलेक्स डुप्यू

काम करता है लेकिन यूनिकोड फाइलें नहीं। Python3 पर utf8 का समर्थन करने के लिए, एक अतिरिक्त तर्क का उपयोग करेंencoding="utf-8"
FindOutIslamNow

2
मुझे नहीं मिल रहा है कि यह समाधान क्यों पोस्ट किया गया है और यह बहुत सारे अपवोट भी हो रहे हैं। यह मूल रूप से एक साल पहले स्वीकार किए गए के रूप में ही है, और यह भी नई लाइन विपठ्ठन भाग याद आ रही है, यह भी कम उपयोगी ..
बकवास

66

आप एक पंक्ति में एक फ़ाइल से पढ़ सकते हैं:

str = open('very_Important.txt', 'r').read()

कृपया ध्यान दें कि यह फ़ाइल को स्पष्ट रूप से बंद नहीं करता है।

CPython फ़ाइल को बंद कर देगा जब यह कचरा संग्रह के भाग के रूप में बाहर निकल जाएगा।

लेकिन अन्य अजगर कार्यान्वयन नहीं होगा। पोर्टेबल कोड लिखने के लिए, withस्पष्ट रूप से फ़ाइल का उपयोग करना या बंद करना बेहतर है । शॉर्ट हमेशा बेहतर नहीं होता है। Https://stackoverflow.com/a/7396043/362951 देखें


32
यह मुहावरेदार विरोधी है और अनुशंसित नहीं है। openएक with ... asबयान के भीतर इस्तेमाल किया जाना चाहिए ।
जॉर्ज लीताओ

1
@ जेसी आप समस्या की व्याख्या कर सकते हैं? क्या यह सिर्फ रिवाज का सवाल है या with ... asबयान कुछ लाता है?
टिटौ

4
@ समस्या यह है कि Open.read () फ़ाइल को बंद नहीं करता है इसलिए हमें या तो ज़रूरत है with ... asया str.close()पेड्रो के उत्तर में प्रदर्शित किया गया है। यहां
JBallin

@JBallin। यह मुहावरा स्पष्ट रूप से त्रुटि के स्रोत को हटा देता है। धन्यवाद !
टिटौ

3
यह भी बुरा है क्योंकि आपने अभी-अभी str()
बिल्डिंस

50

सभी लाइनों को एक स्ट्रिंग में शामिल करने के लिए और नई लाइनों को हटाने के लिए जिन्हें मैं सामान्य रूप से उपयोग करता हूं:

with open('t.txt') as f:
  s = " ".join([x.strip() for x in f]) 

यह मेरे कोड में यूनिकोडडॉर्फर दे रहा है। यह देखें stackoverflow.com/q/18649512/9339242
अरायन सिंह

आपको वर्ण एन्कोडिंग निर्दिष्ट करने की आवश्यकता हो सकती है।
CONvid19

45

पायथन 3.5 या बाद में, पाथलिब का उपयोग करके आप पाठ फ़ाइल सामग्री को एक चर में कॉपी कर सकते हैं और फ़ाइल को एक पंक्ति में बंद कर सकते हैं :

from pathlib import Path
txt = Path('data.txt').read_text()

और फिर आप newlines निकालने के लिए str.replace का उपयोग कर सकते हैं :

txt = txt.replace('\n', '')

31
with open("data.txt") as myfile:
    data="".join(line.rstrip() for line in myfile)

join () स्ट्रिंग्स की एक सूची में शामिल हो जाएगा, और rstrip () बिना किसी तर्क के व्हाट्सएप को ट्रिम्स के अंत से, न्यूलाइन सहित ट्रिम कर देगा।


12

यह रीड () विधि का उपयोग करके किया जा सकता है:

text_as_string = open('Your_Text_File.txt', 'r').read()

या डिफ़ॉल्ट मोड के रूप में ही 'आर' है (पढ़ें) तो बस का उपयोग करें,

text_as_string = open('Your_Text_File.txt').read()

9

मैंने थोड़ी देर के लिए इसके साथ चक्कर लगाया है और इसके readसाथ संयोजन में उपयोग करना पसंद करता हूं rstrip। बिना rstrip("\n"), पायथन स्ट्रिंग के अंत में एक नई रेखा जोड़ता है, जो ज्यादातर मामलों में बहुत उपयोगी नहीं है।

with open("myfile.txt") as f:
    file_content = f.read().rstrip("\n")
    print file_content

6

यह बताना मुश्किल है कि आप क्या कर रहे हैं, लेकिन कुछ इस तरह से आपको शुरू करना चाहिए:

with open ("data.txt", "r") as myfile:
    data = ' '.join([line.replace('\n', '') for line in myfile.readlines()])

कम करें (लैम्ब्डा x, y: x + y.rstrip ('\ n'), ['a \ n', "b \ n", 'c'], "") बहुत अधिक कूलर है: D
स्लीपलेसनर

3
@ डंकन आप क्या सुझाव देंगे?
क्रिस एबरले

data = ' '.join(line.replace('\n', '') for line in myfile)या MagerValp का संस्करण।
डंकन

6

मुझे आश्चर्य है कि splitlines()अभी तक किसी का उल्लेख नहीं किया गया है।

with open ("data.txt", "r") as myfile:
    data = myfile.read().splitlines()

परिवर्तनीय dataअब एक सूची है जो मुद्रित होने पर इस तरह दिखाई देती है:

['LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN', 'GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE']

ध्यान दें कि कोई नई सीमा नहीं है ( \n)।

उस समय, ऐसा लगता है कि आप सांत्वना देने के लिए लाइनों को वापस प्रिंट करना चाहते हैं, जिसे आप लूप के साथ प्राप्त कर सकते हैं:

for line in data:
    print line

4

आप प्रत्येक पंक्ति को अलग भी कर सकते हैं और एक अंतिम स्ट्रिंग में समतल कर सकते हैं।

myfile = open("data.txt","r")
data = ""
lines = myfile.readlines()
for line in lines:
    data = data + line.strip();

यह भी ठीक काम करेगा।


धन्यवाद पेड्रो। मैंने इसे सिर्फ समझ के लिए जोड़ा है।
साईं किरीति बादाम

3

आप इसे कोड की दो पंक्तियों में एक में संपीड़ित कर सकते हैं !!!

content = open('filepath','r').read().replace('\n',' ')
print(content)

यदि आपकी फ़ाइल पढ़ती है:

hello how are you?
who are you?
blank blank

अजगर उत्पादन

hello how are you? who are you? blank blank

3

यह एक लाइन, कॉपी-पेस्ट करने योग्य समाधान है जो फ़ाइल ऑब्जेक्ट को भी बंद कर देता है:

_ = open('data.txt', 'r'); data = _.read(); _.close()

2
f = open('data.txt','r')
string = ""
while 1:
    line = f.readline()
    if not line:break
    string += line

f.close()


print string

2
लूप्स string += lineजिनसे बचना चाहिए था। पायथन के कुछ संस्करण ओ (एन ^ 2) व्यवहार से बचने का प्रबंधन कर सकते हैं, लेकिन इनमें से कोई भी उत्तर जो दिया गया है, वह इससे बेहतर है। इसके अलावा आपने उन नई कड़ियों को भी नहीं हटाया है, जो आपके कोड के लिए अनुरोध की गई थीं, ऐसा करने का बहुत ही धीमा तरीका हैstring = f.read()
डंकन

मुझे सही करने के लिए धन्यवाद। लेकिन एक छोटी सी बात यह है कि मुझे नई लाइन नहीं हटानी है, क्योंकि जब मैंने परीक्षण किया, तो उसने '\ n' प्रिंट नहीं किया। @ डंकन
त्रिशंकु

2

python3: Google "सूची संकलन" यदि स्क्वायर ब्रैकेट सिंटैक्स आपके लिए नया है।

 with open('data.txt') as f:
     lines = [ line.strip( ) for line in list(f) ]


1

मुझे नहीं लगता कि किसी ने भी आपके सवाल का [] हिस्सा संबोधित किया है। जब आप प्रत्येक पंक्ति को अपने चर में पढ़ते हैं, क्योंकि आपके द्वारा \ n को '' के साथ प्रतिस्थापित करने से पहले कई पंक्तियाँ थीं, तो आपने एक सूची बनाई। अगर आपके पास x का वेरिएबल है और इसे प्रिंट करके ही निकालें

एक्स

या प्रिंट (एक्स)

या str (x)

आप कोष्ठक के साथ पूरी सूची देखेंगे। यदि आप प्रत्येक तत्व को कहते हैं (प्रकार की सरणी)

x [०] तब यह कोष्ठक को छोड़ देता है। यदि आप str () फ़ंक्शन का उपयोग करते हैं, तो आप केवल डेटा देखेंगे और '' या तो नहीं। str (एक्स [0])


1

शायद आप यह कोशिश कर सकते हैं? मैं अपने कार्यक्रमों में इसका उपयोग करता हूं।

Data= open ('data.txt', 'r')
data = Data.readlines()
for i in range(len(data)):
    data[i] = data[i].strip()+ ' '
data = ''.join(data).strip()

1

नियमित अभिव्यक्ति भी काम करती है:

import re
with open("depression.txt") as f:
     l = re.split(' ', re.sub('\n',' ', f.read()))[:-1]

print (l)

['मैं', 'महसूस', 'खाली', 'और', 'मृत', 'अंदर']


1

पायथन का उपयोग करके लाइन ब्रेक को हटाने के लिए आप उपयोग कर सकते हैं replace एक स्ट्रिंग के फ़ंक्शन का ।

यह उदाहरण सभी 3 प्रकार के लाइन ब्रेक को हटाता है:

my_string = open('lala.json').read()
print(my_string)

my_string = my_string.replace("\r","").replace("\n","")
print(my_string)

उदाहरण फ़ाइल है:

{
  "lala": "lulu",
  "foo": "bar"
}

आप इस रीप्ले परिदृश्य का उपयोग करके इसे आज़मा सकते हैं:

https://repl.it/repls/AnnualJointHardware

यहां छवि विवरण दर्ज करें


0

यह काम करता है: अपनी फ़ाइल को इसमें बदलें:

LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE

फिर:

file = open("file.txt")
line = file.read()
words = line.split()

यह एक सूची बनाता है जिसका नाम wordsबराबर है:

['LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN', 'GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE']

कि "\ n" से छुटकारा मिल गया। अपने तरीके से प्राप्त होने वाले ब्रैकेट के बारे में भाग का उत्तर देने के लिए, बस यह करें:

for word in words: # Assuming words is the list above
    print word # Prints each word in file on a different line

या:

print words[0] + ",", words[1] # Note that the "+" symbol indicates no spaces
#The comma not in parentheses indicates a space

यह रिटर्न:

LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN, GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE

1
फ़ाइल को बदलना एक बंद स्थिति में काम कर सकता है लेकिन अगर आपके पास सैकड़ों फाइलें हैं तो यह एक व्यावहारिक समाधान नहीं है।
क्रेसरजैक

0
with open(player_name, 'r') as myfile:
 data=myfile.readline()
 list=data.split(" ")
 word=list[0]

यह कोड आपको पहली पंक्ति पढ़ने में मदद करेगा और फिर सूची और विभाजन विकल्प का उपयोग करके आप सूची में संग्रहीत होने वाली पहली पंक्ति के शब्द को स्थान द्वारा अलग कर सकते हैं।

थान से आप किसी भी शब्द को आसानी से एक्सेस कर सकते हैं, या इसे एक स्ट्रिंग में स्टोर कर सकते हैं।

आप लूप के उपयोग के साथ भी यही काम कर सकते हैं।


0
file = open("myfile.txt", "r")
lines = file.readlines()
str = ''                                     #string declaration

for i in range(len(lines)):
    str += lines[i].rstrip('\n') + ' '

print str

-1

निम्नलिखित आज़माएँ:

with open('data.txt', 'r') as myfile:
    data = myfile.read()

    sentences = data.split('\\n')
    for sentence in sentences:
        print(sentence)

सावधानी: यह दूर नहीं करता है \n। यह केवल पाठ को देखने के लिए है जैसे कि वहाँ नहीं थे\n

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.