স্ট্রিং ভেরিয়েবল এবং স্ট্রিপ নিউলাইনগুলিতে কোনও পাঠ্য ফাইলটি কীভাবে পড়বেন?


960

পাইথনে একটি ফাইল পড়তে আমি নিম্নলিখিত কোড বিভাগটি ব্যবহার করি:

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

ইনপুট ফাইলটি হ'ল:

LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN
GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE

এবং যখন আমি ডেটা মুদ্রণ করি তখন পাই

['LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN\n', 'GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE']

আমি দেখতে ডেটা listফর্ম মধ্যে আছে। আমি এটি স্ট্রিং কিভাবে করব? এবং এছাড়াও আমি অপসারণ না "\n", "["এবং "]"এটা থেকে অক্ষর?



7
শিরোনাম এবং প্রশ্নটি বেমানান। আপনি কি সত্যিই of n এর থেকেও মুক্তি পেতে চান?
জুলিয়ান

2
আপনি কি ফাইল / স্ট্রিংয়ের বিষয়বস্তু থেকে সত্যিই নতুনলাইনগুলি সরাতে চান, বা আপনি কি আপনার মুদ্রণ আউটপুটে অনেকগুলি মেটা-চরিত্র সম্পর্কে বিভ্রান্ত হয়ে পড়েছেন এবং আসলে নতুন লাইনের রক্ষণ রাখতে চান, তবে সেগুলিকে "\ n" হিসাবে প্রদর্শন করবেন না?
mnagel

10
সার্চ ইঞ্জিন থেকে যারা এখানে আসছেন তাদের জন্য আপনি সম্ভবত @ জিয়াওয়ের উত্তর খুঁজছেন
জোনাথন সুদিয়ামান

উত্তর:


1316

আপনি ব্যবহার করতে পারেন:

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

66
কেবল open("data.txt").read().replace('\n','')পরিবর্তে লেখার ক্ষেত্রে কি কোনও খারাপ দিক রয়েছে ?
tuomassalo

262
হ্যাঁ, আপনার সংস্করণটি স্পষ্টভাবে ফাইলটি বন্ধ করে না, আবর্জনা সংগ্রহকারী চালিত না হওয়া বা প্রোগ্রামটি শেষ না হওয়া পর্যন্ত এটি বিলম্বিত হবে। 'উইথ' স্টেটমেন্টটি সাধারণত কিছু সেটআপ / টিয়ারডাউন খোলা / বন্ধ ক্রিয়াকলাপগুলিকে আবদ্ধ করে।
নিদ্রাহীনতা

12
স্পষ্টতার জন্য ধন্যবাদ। সুতরাং, দেখে মনে হচ্ছে যে আমার সংস্করণটি ছোট স্ক্রিপ্টগুলির জন্য ঠিক আছে - তবে এটি অভ্যাস না তৈরি করার জন্য এটি মোটেও এড়ানো উচিত।
tuomassalo

10
@ টিওমাসালো এই পরীক্ষা / ডিবাগ প্রক্রিয়াতে এটি একটি বিশাল পিআইটিএ, কারণ যদি আপনাকে অকাল থেকে শেষ করতে হয় বা এটি ব্যতিক্রম হয়ে যায় তবে এটি উন্মুক্ত ফাইল হ্যান্ডলগুলি পরিষ্কার করবে না।
GoingTharn

13
না, rstrip('\n')কেবল শেষ লাইনটি থেকে নতুন লাইনটি replace('\n','')সরিয়ে ফেলবে, এটিকে সর্বত্র সরিয়ে ফেলবে (মূলত পুরো ফাইলটিকে একটি লাইন তৈরি করে)
ঘুমন্তহীন

629

ব্যবহার করুন read(), না readline():

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

6
সম্ভবত, তবে এটি ওপি যেমন চেয়েছিল তেমন নতুন লাইনগুলিকে বাদ দেয় না। যদিও আমি এখনও এটি পছন্দ করি।
রেন্ডাল কুক

60
আপনি যদি একটি একক স্ট্রিং ফিরিয়ে দিচ্ছেন তবে নিউলাইনগুলি ছড়িয়ে দেওয়া কোনও অর্থবোধ করে না - ওপিকে তালিকার স্ট্রিংগুলি থেকে একটি স্ট্রিং বা স্ট্রিপ \ n বেছে নেওয়া উচিত।
অ্যালেক্স ডুপুয়

কাজ করে তবে ইউনিকোড ফাইল নয়। পাইথন 3-এ utf8 সমর্থন করতে একটি অতিরিক্ত যুক্তি ব্যবহার করুনencoding="utf-8"
FindOutIslam এখন

2
কেন এই সমাধান পোস্ট করা হয়েছে তা আমি পাচ্ছি না এবং এটি অনেকগুলি উপার্জনও পাচ্ছে। এটি মূলত একইরকম যা এক বছরেরও বেশি সময় ধরে গৃহীত হয়েছিল, এবং এটি নতুন লাইন স্ট্রিপিং অংশটি হারিয়েছে, এটি আরও কম সহায়ক করে
তুলেছে

66

আপনি একটি লাইনে একটি ফাইল থেকে পড়তে পারেন:

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

দয়া করে মনে রাখবেন এটি স্পষ্টভাবে ফাইলটি বন্ধ করে না।

আবর্জনা সংগ্রহের অংশ হিসাবে সিপাইথন ফাইলটি বন্ধ করবে।

তবে অন্যান্য অজগর বাস্তবায়ন হবে না। পোর্টেবল কোড লেখার জন্য, withস্পষ্টভাবে ফাইলটি ব্যবহার করা বা বন্ধ করা ভাল । সংক্ষিপ্ত সবসময় ভাল হয় না। Https://stackoverflow.com/a/7396043/362951 দেখুন


32
এটি অ্যান্টি-ইডিয়োম্যাটিক এবং প্রস্তাবিত নয়। openএকটি with ... asবিবৃতি মধ্যে ব্যবহার করা উচিত ।
জর্জি লিটাইও

1
@ জিসি আপনি সমস্যাটি ব্যাখ্যা করতে পারেন? এটি কি কেবল প্রথার প্রশ্ন বা with ... asবিবৃতিতে কিছু আনা?
টাইটু

4
@ ততই সমস্যাটি হ'ল ওপেন.রেড () ফাইলটি বন্ধ করে না তাই আমাদের দরকার হয় with ... asবা str.close()পেড্রোর উত্তরে যেমন প্রদর্শিত হয়েছে। সমাপনী ফাইলের গুরুত্ব আরো এখানে
JBallin

@JBallin। এই প্রতিমাটি স্পষ্টতই ত্রুটির উত্সকে সরিয়ে দেয়। ধন্যবাদ!
টাইটু

3
এটিও খারাপ কারণ আপনি কেবল str()বিল্টিনগুলি থেকে ছায়া পেয়েছেন
ক্রিস_আরেন্ডস

50

সমস্ত লাইনে একটি স্ট্রিংয়ে যোগ দিতে এবং নতুন লাইনগুলি সরাতে আমি সাধারণত ব্যবহার করি:

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

এটা এই দেখুন আমার কোডে UnicodeDecodeError দিচ্ছেন stackoverflow.com/q/18649512/9339242
Arayan সিং

আপনি অক্ষর এনকোডিং নির্দিষ্ট করতে হতে পারে।
CONvid19

45

পাইথন 3.5 বা তারপরে , প্যাথলিব ব্যবহার করে আপনি পাঠ্য ফাইলের বিষয়বস্তুগুলিকে ভেরিয়েবলের মধ্যে অনুলিপি করতে এবং ফাইলটিকে এক লাইনে বন্ধ করতে পারেন:

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

এবং তারপরে আপনি নতুনলাইনগুলি সরাতে str.replace ব্যবহার করতে পারেন :

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

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

join () স্ট্রিংয়ের তালিকায় যোগ দেবে, এবং কোনও যুক্তি ছাড়াই স্ট্রাস্ট্রিপ () স্ট্রিংয়ের শেষে থেকে নিউলাইনগুলি সহ হোয়াইটস্পেসটি ছাঁটাই করবে।


12

এটি পঠন () পদ্ধতিটি ব্যবহার করে করা যেতে পারে:

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

বা ডিফল্ট মোড হিসাবে নিজেই 'আর' (পঠিত) তাই সহজভাবে ব্যবহার করুন,

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

9

আমি কিছুক্ষণের জন্য এটিকে ঘিরে ধরেছি এবং এর readসাথে সংমিশ্রণে ব্যবহার করতে পছন্দ করি rstriprstrip("\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()])

হ্রাস (ল্যাম্বদা এক্স, y: x + y.rstrip ('\ n'), ['a \ n', "বি \ এন", 'সি'], "") অনেক শীতল: ডি
স্লিপলেসনার্ড

3
@ ডানকান আপনার কি পরামর্শ দেবে?
ক্রিস ইবারেল

data = ' '.join(line.replace('\n', '') for line in myfile)বা ম্যাগজারভাল্পের সংস্করণ।
ডানকান

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


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

পাইথন 3: বর্গাকার বন্ধনী সিনট্যাক্সটি আপনার কাছে নতুন হলে গুগল "তালিকা সংশ্লেষ"।

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


1

আমি মনে করি না যে কেউ আপনার প্রশ্নের []] অংশকে সম্বোধন করেছে। আপনি যখন প্রতিটি ভেরিয়েবলে লাইনটি পড়েন, কারণ 'n এর পরিবর্তে আপনি একাধিক লাইন রেখেছিলেন' 'এর সাথে আপনি একটি তালিকা তৈরি করা শেষ করেছিলেন। যদি আপনার এক্স এর ভেরিয়েবল থাকে এবং এটি ঠিক তখনই মুদ্রণ করে

এক্স

বা মুদ্রণ (এক্স)

বা str (x)

বন্ধনীগুলি সহ আপনি পুরো তালিকাটি দেখতে পাবেন। যদি আপনি প্রতিটি উপাদানকে (ধরণের অ্যারে) কল করেন

x [0] এর পরে এটি বন্ধনীগুলি বাদ দেয়। আপনি যদি 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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.