පෙළ ගොනුවක් නූල් විචල්‍යයකට කියවා නව රේඛා ඉවත් කරන්නේ කෙසේද?


986

පයිතන් හි ගොනුවක් කියවීමට මම පහත කේත කොටස භාවිතා කරමි:

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

ආදාන ගොනුව:

LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN
GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE

මම දත්ත මුද්‍රණය කරන විට මට ලැබෙනවා

['LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN\n', 'GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE']

මා දකින පරිදි දත්ත listස්වරූපයෙන් පවතී. මම එය නූල් කරන්නේ කෙසේද? තවද "\n", එයින් "[", සහ "]"අක්ෂර ඉවත් කරන්නේ කෙසේද?



8
මාතෘකාව සහ ප්‍රශ්නය නොගැලපේ. ඔබටත් really n ඉවත් කිරීමට අවශ්‍යද?
ජූලියන්

2
ඔබට ඇත්ත වශයෙන්ම ලිපිගොනු / නූල් අන්තර්ගතයෙන් නව රේඛා ඉවත් කිරීමට අවශ්‍යද, නැතහොත් ඔබේ මුද්‍රණ නිමැවුමේ ඇති මෙටා-අක්ෂර බොහෝමයක් ගැන ඔබ ව්‍යාකූල වී ඇති අතර ඇත්ත වශයෙන්ම නව රේඛා තබා ගැනීමට අවශ්‍යද, නමුත් ඒවා "\ n" ලෙස දර්ශනය නොවන්නේද?
mnagel

Answers:


1362

ඔබට භාවිතා කළ හැකිය:

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

71
open("data.txt").read().replace('\n','')වෙනුවට ලිවීමෙහි අවාසියක් තිබේද?
tuomassalo

272
ඔව්, ඔබේ අනුවාදය ගොනුව පැහැදිලිව වසා නොගනී, එය කසළ එකතු කරන්නා ක්‍රියාත්මක වන තෙක් හෝ වැඩසටහන අවසන් වන තෙක් ප්‍රමාද වනු ඇත. 'With' ප්‍රකාශය සාමාන්‍යයෙන් සමහර සැකසුම් / කඳුළු පිරි විවෘත / සමීප ක්‍රියා ආවරණය කරයි.
sleeplessnerd

13
පැහැදිලි කිරීම සඳහා ස්තූතියි. එබැවින්, මගේ අනුවාදය කුඩා ස්ක්‍රිප්ට් සඳහා හොඳ විය හැකි බව පෙනේ - නමුත් OTOH එය පුරුද්දක් කර නොගැනීම සඳහා එය සම්පූර්ණයෙන්ම වළක්වා ගත යුතුය.
tuomassalo

11
umtuomassalo එය පරීක්ෂණ / නිදොස් කිරීමේ ක්‍රියාවලියේ විශාල PITA එකක් වන අතර, ඔබට අකාලයේ අවසන් කිරීමට සිදුවුවහොත් හෝ එය ව්‍යතිරේකයක් දක්වා දිව යන්නේ නම් එය විවෘත ලිපිගොනු හසුරුවන්නේ නැත.
GoingTharn

13
නැත, rstrip('\n')නව රේඛාව අන්තිම පේළියෙන් පමණක් ඉවත් කරනු ඇත, replace('\n','')එය සෑම තැනකම ඉවත් කරයි (අත්‍යවශ්‍යයෙන්ම මුළු ගොනුවම එක පේළියක් බවට පත් කරයි)
නිදි නැති

68

ඔබට එක් පේළියකින් ගොනුවකින් කියවිය හැකිය:

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

මෙය ගොනුව පැහැදිලිවම වසා නොදමන බව කරුණාවෙන් සලකන්න.

කසළ එකතු කිරීමේ කොටසක් ලෙස ගොනුව පිටවන විට CPython එය වසා දමනු ඇත.

නමුත් වෙනත් පයිතන් ක්‍රියාත්මක කිරීම් සිදු නොවේ. අතේ ගෙන යා හැකි කේතයක් ලිවීමට, withගොනුව පැහැදිලිව භාවිතා කිරීම හෝ වසා දැමීම වඩා හොඳය . කෙටි සෑම විටම වඩා හොඳ නොවේ. Https://stackoverflow.com/a/7396043/362951 බලන්න


33
මෙය මුග්ධ විරෝධී වන අතර නිර්දේශ නොකරයි. ප්‍රකාශයක් openතුළ භාවිතා කළ යුතුය with ... as.
ජෝර්ජ් ලීටාවෝ

1
@JC ඔබට ගැටලුව පැහැදිලි කළ හැකිද? මෙය හුදෙක් සිරිත් විරිත් පිළිබඳ ප්‍රශ්නයක්ද with ... as?
ටයිටෝ

4
It ගැටළුව වන්නේ open.read () ගොනුව වැසෙන්නේ නැති නිසා අපට අවශ්‍ය with ... asහෝ str.close()පේද්‍රෝගේ පිළිතුරෙන් නිරූපණය කර ඇති බවයි. තවත් ගොනු වසා දැමීමේ වැදගත්කම පිළිබඳව මෙහි
JBallin

@ ජේබලින්. මෙම මෝඩකම දෝෂයේ ප්‍රභවයක් පැහැදිලිව ඉවත් කරයි. ස්තූතියි!
ටයිටෝ

3
මෙයද නරක ය, මන්ද ඔබ str()
බිල්ඩින්

51

සියලුම රේඛා නූලකට සම්බන්ධ කර නව රේඛා ඉවත් කිරීමට, මම සාමාන්‍යයෙන් භාවිතා කරන්නේ:

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

එය මගේ කේතයට යුනිකෝඩ් ඩෙකෝඩ් දෝෂය ලබා දෙයි. මෙම stackoverflow.com/q/18649512/9339242
අරයාන් සිං

ඔබට අක්ෂර කේතීකරණය නියම කිරීමට අවශ්‍ය විය හැකිය.
CONvid19

49

පයිතන් 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 () නූල් ලැයිස්තුවකට සම්බන්ධ වන අතර කිසිදු තර්කයක් නොමැති rstrip () නව රේඛා ඇතුළු සුදු අවකාශය නූල් අවසානයේ සිට කපා දමනු ඇත.


12

කියවීමේ () ක්‍රමය භාවිතයෙන් මෙය කළ හැකිය:

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

නැතහොත් පෙරනිමි ප්‍රකාරය 'r' (කියවීම) බැවින් සරලව භාවිතා කරන්න,

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

7

මට පුදුමයි splitlines()තවම කිසිවෙකු සඳහන් නොකිරීම.

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

විචල්‍යය dataදැන් මුද්‍රණය කරන විට මේ ආකාරයට පෙනෙන ලැයිස්තුවකි:

['LLKKKKKKKKMMMMMMMMNNNNNNNNNNNNN', 'GGGGGGGGGHHHHHHHHHHHHHHHHHHHHEEEEEEEE']

නව රේඛා ( \n) නොමැති බව සලකන්න .

එම අවස්ථාවේදී, ඔබට කොන්සෝලය සඳහා පේළි නැවත මුද්‍රණය කිරීමට අවශ්‍ය බව පෙනේ, එය ඔබට ලූපයක් සමඟ සාක්ෂාත් කරගත හැකිය:

for line in data:
    print line

6

ඔබ පසු වූ දේ හරියටම පැවසීම දුෂ්කර ය, නමුත් මෙවැනි දෙයක් ඔබ ආරම්භ කළ යුතුය:

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

අඩු කරන්න (lambda x, y: x + y.rstrip ('\ n'), ['a \ n', "b \ n", 'c'], "") බොහෝ සිසිල් ය: D
sleeplessnerd

3
Un ඩන්කන් ඔබ යෝජනා කරන්නේ කුමක්ද?
ක්‍රිස් එබර්ල්

data = ' '.join(line.replace('\n', '') for line in myfile)හෝ MagerValp හි අනුවාදය.
ඩන්කන්

4

ඔබට එක් එක් පේළිය ඉවත් කර අවසාන නූලකට සම්බන්ධ කළ හැකිය.

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

මෙයද හොඳින් ක්‍රියාත්මක වේ.


ස්තූතියි පේද්‍රෝ. අවබෝධය සඳහා මම එය එකතු කළෙමි.
සායි කිරිටි බඩම්

3

python3: වර්ග වරහන් සින්ටැක්ස් ඔබට අලුත් නම් ගූගල් “ලැයිස්තු සංසන්දනය” කරන්න.

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

මම තවමත් විශාල ලිපිගොනු පරීක්ෂා කර නොතිබුණද ඉතා පයිතොනික් සහ මා වෙනුවෙන් හොඳින් වැඩ කළෙමි. ඔබට ස්තුතියි!
stux

තීරුව ද සුදු අවකාශය ඉවත් කරන නිසා මම අපේ උඩුකය ඉවත් කර ගන්නෙමි, එය අපේක්ෂිත හැසිරීම නොවිය හැකිය. කෙසේ වෙතත්, මම තවමත් සිතන්නේ මෙහි නවීකරණය කරන ලද අනුවාදයක් හොඳ වනු ඇති බවයි.
stux

3

ඔබට මෙය කේත පේළි දෙකකට බෙදිය හැකිය !!!

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

ඔබේ ගොනුව කියවන්නේ නම්:

hello how are you?
who are you?
blank blank

python ප්‍රතිදානය

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වළක්වා ගත යුතුය. පයිතන්ගේ සමහර අනුවාදයන් මෙහි O (n ^ 2) හැසිරීමෙන් වැළකී සිටිය හැකි නමුත් ලබා දී ඇති වෙනත් පිළිතුරු මෙයට වඩා හොඳය. ඔබ ඉල්ලූ නව රේඛා ඉවත් නොකළ නිසා ඔබේ කේතය ඉතා මන්දගාමී ක්‍රමයක් වේstring = f.read()
ඩන්කන්

මාව නිවැරදි කිරීමට ස්තූතියි. නමුත් එක් කුඩා දෙයක් නම්, මට නව පේළිය ඉවත් කිරීමට සිදු නොවීමයි, මන්ද මා පරීක්ෂා කළ විට එය '\ n' මුද්‍රණය නොකළේය. Un ඩන්කන්
හන්ග්නොක්ස්


2

පයිතන් භාවිතයෙන් රේඛා බිඳීම් ඉවත් කිරීමට ඔබට නූලක replaceක්‍රියාකාරිත්වය භාවිතා කළ හැකිය .

මෙම උදාහරණය මඟින් සියලු ආකාරයේ රේඛා බිඳීම් ඉවත් කරයි:

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

රූප විස්තරය මෙහි ඇතුළත් කරන්න


1

ඔබේ ප්‍රශ්නයේ [කිසිවෙකු] කිසිවෙකු ආමන්ත්‍රණය කළ බව මට හැඟෙන්නේ නැත. ඔබ එක් එක් පේළිය ඔබේ විචල්‍යයට කියවන විට, ඔබ lines n වෙනුවට ආදේශ කිරීමට පෙර පේළි කිහිපයක් තිබූ බැවින් ඔබ ලැයිස්තුවක් නිර්මාණය කිරීම අවසන් කළේය. ඔබට x විචල්‍යයක් තිබේ නම් එය මුද්‍රණය කරන්න

x

හෝ මුද්‍රණය කරන්න (x)

හෝ str (x)

ඔබ සම්පූර්ණ ලැයිස්තුව වරහන් සමඟ දකිනු ඇත. ඔබ එක් එක් මූලද්‍රව්‍යය අමතන්නේ නම් (විවිධ වර්ගවල)

x [0] එවිට එය වරහන් මඟ හැරේ. ඔබ str () ශ්‍රිතය භාවිතා කරන්නේ නම් ඔබට පෙනෙන්නේ දත්ත පමණක් මිස '' නොවේ. str (x [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)

['මම', 'හැඟීම', 'හිස්', 'සහ', 'මළ', 'ඇතුළත']


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]

මෙම කේතය ඔබට පළමු පේළිය කියවීමට උපකාරී වන අතර පසුව ලැයිස්තුව සහ බෙදීම් විකල්පය භාවිතා කිරීමෙන් ඔබට පළමු පේළියේ වචනය අවකාශයෙන් වෙන් කොට ලැයිස්තුවක් තුළ ගබඩා කළ හැකිය.

ඔබට ඕනෑම වචනයකට පහසුවෙන් ප්‍රවේශ විය හැකිය, නැතහොත් එය නූලක ගබඩා කරන්න.

For for loop එකක් භාවිතා කිරීමෙන් ඔබට එකම දේ කළ හැකිය.


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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.