First line fails to load from text file in Python
I'm new to Python I do not understand why my code fails to load the first line. Could someone please take a look?
My code is:
f = open("test.txt")
line = f.readline()
joined=
while line:
line=f.readline().split()
for x in line:
joined.append(line)
f.close()
print(joined)
"test.txt" file looks like this:
This is the 1st line !
This is the 2nd line .
This is the 3rd line ?
This is the 4th line
This is the 5th line .
I get this (first line is missing, also duplicate entries):
[['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '4th', 'line'], ['This', 'is', 'the', '4th', 'line'], ['This', 'is', 'the', '4th', 'line'], ['This', 'is', 'the', '4th', 'line'], ['This', 'is', 'the', '4th', 'line'], ['This', 'is', 'the', '5th', 'line', '.'], ['This', 'is', 'the', '5th', 'line', '.'], ['This', 'is', 'the', '5th', 'line', '.'], ['This', 'is', 'the', '5th', 'line', '.'], ['This', 'is', 'the', '5th', 'line', '.'], ['This', 'is', 'the', '5th', 'line', '.']]
But desired output is:
[['This', 'is', 'the', '1st', 'line', '!'], ['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '4th', 'line'], ['This', 'is', 'the', '5th', 'line', '.']]
Also, is there a way to lowercase all characters in all of the lists?
python python-3.x
add a comment |
I'm new to Python I do not understand why my code fails to load the first line. Could someone please take a look?
My code is:
f = open("test.txt")
line = f.readline()
joined=
while line:
line=f.readline().split()
for x in line:
joined.append(line)
f.close()
print(joined)
"test.txt" file looks like this:
This is the 1st line !
This is the 2nd line .
This is the 3rd line ?
This is the 4th line
This is the 5th line .
I get this (first line is missing, also duplicate entries):
[['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '4th', 'line'], ['This', 'is', 'the', '4th', 'line'], ['This', 'is', 'the', '4th', 'line'], ['This', 'is', 'the', '4th', 'line'], ['This', 'is', 'the', '4th', 'line'], ['This', 'is', 'the', '5th', 'line', '.'], ['This', 'is', 'the', '5th', 'line', '.'], ['This', 'is', 'the', '5th', 'line', '.'], ['This', 'is', 'the', '5th', 'line', '.'], ['This', 'is', 'the', '5th', 'line', '.'], ['This', 'is', 'the', '5th', 'line', '.']]
But desired output is:
[['This', 'is', 'the', '1st', 'line', '!'], ['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '4th', 'line'], ['This', 'is', 'the', '5th', 'line', '.']]
Also, is there a way to lowercase all characters in all of the lists?
python python-3.x
Is it just me, but I cannot load the first line of the text file?!
– Glupan123
Nov 26 '18 at 18:52
add a comment |
I'm new to Python I do not understand why my code fails to load the first line. Could someone please take a look?
My code is:
f = open("test.txt")
line = f.readline()
joined=
while line:
line=f.readline().split()
for x in line:
joined.append(line)
f.close()
print(joined)
"test.txt" file looks like this:
This is the 1st line !
This is the 2nd line .
This is the 3rd line ?
This is the 4th line
This is the 5th line .
I get this (first line is missing, also duplicate entries):
[['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '4th', 'line'], ['This', 'is', 'the', '4th', 'line'], ['This', 'is', 'the', '4th', 'line'], ['This', 'is', 'the', '4th', 'line'], ['This', 'is', 'the', '4th', 'line'], ['This', 'is', 'the', '5th', 'line', '.'], ['This', 'is', 'the', '5th', 'line', '.'], ['This', 'is', 'the', '5th', 'line', '.'], ['This', 'is', 'the', '5th', 'line', '.'], ['This', 'is', 'the', '5th', 'line', '.'], ['This', 'is', 'the', '5th', 'line', '.']]
But desired output is:
[['This', 'is', 'the', '1st', 'line', '!'], ['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '4th', 'line'], ['This', 'is', 'the', '5th', 'line', '.']]
Also, is there a way to lowercase all characters in all of the lists?
python python-3.x
I'm new to Python I do not understand why my code fails to load the first line. Could someone please take a look?
My code is:
f = open("test.txt")
line = f.readline()
joined=
while line:
line=f.readline().split()
for x in line:
joined.append(line)
f.close()
print(joined)
"test.txt" file looks like this:
This is the 1st line !
This is the 2nd line .
This is the 3rd line ?
This is the 4th line
This is the 5th line .
I get this (first line is missing, also duplicate entries):
[['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '4th', 'line'], ['This', 'is', 'the', '4th', 'line'], ['This', 'is', 'the', '4th', 'line'], ['This', 'is', 'the', '4th', 'line'], ['This', 'is', 'the', '4th', 'line'], ['This', 'is', 'the', '5th', 'line', '.'], ['This', 'is', 'the', '5th', 'line', '.'], ['This', 'is', 'the', '5th', 'line', '.'], ['This', 'is', 'the', '5th', 'line', '.'], ['This', 'is', 'the', '5th', 'line', '.'], ['This', 'is', 'the', '5th', 'line', '.']]
But desired output is:
[['This', 'is', 'the', '1st', 'line', '!'], ['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '4th', 'line'], ['This', 'is', 'the', '5th', 'line', '.']]
Also, is there a way to lowercase all characters in all of the lists?
python python-3.x
python python-3.x
edited Nov 26 '18 at 19:12
PGCodeRider
2,1081827
2,1081827
asked Nov 26 '18 at 18:41
Glupan123Glupan123
31
31
Is it just me, but I cannot load the first line of the text file?!
– Glupan123
Nov 26 '18 at 18:52
add a comment |
Is it just me, but I cannot load the first line of the text file?!
– Glupan123
Nov 26 '18 at 18:52
Is it just me, but I cannot load the first line of the text file?!
– Glupan123
Nov 26 '18 at 18:52
Is it just me, but I cannot load the first line of the text file?!
– Glupan123
Nov 26 '18 at 18:52
add a comment |
4 Answers
4
active
oldest
votes
You can use a list comprehension that iterates through lines splitting on space:
with open('test.txt') as f:
print([x.split() for x in f])
# [['This', 'is', 'the', '1st', 'line', '!'],
# ['This', 'is', 'the', '2nd', 'line', '.'],
# ['This', 'is', 'the', '3rd', 'line', '?'],
# ['This', 'is', 'the', '4th', 'line'],
# ['This', 'is', 'the', '5th', 'line', '.']]
To make all lower case:
print([x.lower().split() for x in f])
# [['this', 'is', 'the', '1st', 'line', '!'],
# ['this', 'is', 'the', '2nd', 'line', '.'],
# ['this', 'is', 'the', '3rd', 'line', '?'],
# ['this', 'is', 'the', '4th', 'line'],
# ['this', 'is', 'the', '5th', 'line', '.']]
The reason why you are not getting the first line is because you do .readline()
outside loop and never used it. You immediately replace that with another .readline()
in the loop leaving you with lines from second position onwards.
Oh wow! This works perfectly! Thank you so much. I still don't get why the first line was missing?!
– Glupan123
Nov 26 '18 at 18:53
@Glupan123, Please find the explanation.
– Austin
Nov 26 '18 at 18:58
1
Thank you so much! Works like a charm.
– Glupan123
Nov 26 '18 at 19:10
add a comment |
You're discarding the value returned by the first readline()
, which is why the first line of your file is missing in the output. You can iterate over the file object as an iterator instead:
joined =
for line in f:
joined.append(line.split())
print(joined)
Thank you for this clarification... I did not know that the first "readline()" also removes the first line in the output.
– Glupan123
Nov 26 '18 at 19:03
add a comment |
To answer your additional question how to lowercase all characters:
str.lower()
gives you the lowercase of a string. So to complete the above answer:
with open('test.txt') as f:
print([x.split().lower() for x in f])
This should do it.
Lists don't have.lower()
.
– Austin
Nov 26 '18 at 19:00
Thank you for this suggestion... but I get the following error: AttributeError: 'list' object has no attribute 'lower'
– Glupan123
Nov 26 '18 at 19:01
add a comment |
There are a couple issues here. The first is that the first line is not appended to your joined
list because it is defined and then overwritten at the beginning of the while
loop on the first iteration before it can be appended to the joined
list.
The second is that you write:
for x in line:
joined.append(line)
Which adds the whole line
to joined
for each element in line
. So the second lines gets appended 6 times because it contains 6 elements. I think you meant to append x
to joined
, but that will give you all the words in a single list rather than nested lists as desired. Since each line is already split into a list of individual words, there is no need for this inner loop.
You can write your code more concisely with:
with open("test.txt", "r") as f:
joined = [line.split() for line in f.readlines()]
Result:
[['This', 'is', 'the', '1st', 'line', '!'], ['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '4th', 'line'], ['This', 'is', 'the', '5th', 'line', '.']]
Thank you Sir for this great clarification. Now the duplicates make sense.
– Glupan123
Nov 26 '18 at 18:55
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53487168%2ffirst-line-fails-to-load-from-text-file-in-python%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
4 Answers
4
active
oldest
votes
4 Answers
4
active
oldest
votes
active
oldest
votes
active
oldest
votes
You can use a list comprehension that iterates through lines splitting on space:
with open('test.txt') as f:
print([x.split() for x in f])
# [['This', 'is', 'the', '1st', 'line', '!'],
# ['This', 'is', 'the', '2nd', 'line', '.'],
# ['This', 'is', 'the', '3rd', 'line', '?'],
# ['This', 'is', 'the', '4th', 'line'],
# ['This', 'is', 'the', '5th', 'line', '.']]
To make all lower case:
print([x.lower().split() for x in f])
# [['this', 'is', 'the', '1st', 'line', '!'],
# ['this', 'is', 'the', '2nd', 'line', '.'],
# ['this', 'is', 'the', '3rd', 'line', '?'],
# ['this', 'is', 'the', '4th', 'line'],
# ['this', 'is', 'the', '5th', 'line', '.']]
The reason why you are not getting the first line is because you do .readline()
outside loop and never used it. You immediately replace that with another .readline()
in the loop leaving you with lines from second position onwards.
Oh wow! This works perfectly! Thank you so much. I still don't get why the first line was missing?!
– Glupan123
Nov 26 '18 at 18:53
@Glupan123, Please find the explanation.
– Austin
Nov 26 '18 at 18:58
1
Thank you so much! Works like a charm.
– Glupan123
Nov 26 '18 at 19:10
add a comment |
You can use a list comprehension that iterates through lines splitting on space:
with open('test.txt') as f:
print([x.split() for x in f])
# [['This', 'is', 'the', '1st', 'line', '!'],
# ['This', 'is', 'the', '2nd', 'line', '.'],
# ['This', 'is', 'the', '3rd', 'line', '?'],
# ['This', 'is', 'the', '4th', 'line'],
# ['This', 'is', 'the', '5th', 'line', '.']]
To make all lower case:
print([x.lower().split() for x in f])
# [['this', 'is', 'the', '1st', 'line', '!'],
# ['this', 'is', 'the', '2nd', 'line', '.'],
# ['this', 'is', 'the', '3rd', 'line', '?'],
# ['this', 'is', 'the', '4th', 'line'],
# ['this', 'is', 'the', '5th', 'line', '.']]
The reason why you are not getting the first line is because you do .readline()
outside loop and never used it. You immediately replace that with another .readline()
in the loop leaving you with lines from second position onwards.
Oh wow! This works perfectly! Thank you so much. I still don't get why the first line was missing?!
– Glupan123
Nov 26 '18 at 18:53
@Glupan123, Please find the explanation.
– Austin
Nov 26 '18 at 18:58
1
Thank you so much! Works like a charm.
– Glupan123
Nov 26 '18 at 19:10
add a comment |
You can use a list comprehension that iterates through lines splitting on space:
with open('test.txt') as f:
print([x.split() for x in f])
# [['This', 'is', 'the', '1st', 'line', '!'],
# ['This', 'is', 'the', '2nd', 'line', '.'],
# ['This', 'is', 'the', '3rd', 'line', '?'],
# ['This', 'is', 'the', '4th', 'line'],
# ['This', 'is', 'the', '5th', 'line', '.']]
To make all lower case:
print([x.lower().split() for x in f])
# [['this', 'is', 'the', '1st', 'line', '!'],
# ['this', 'is', 'the', '2nd', 'line', '.'],
# ['this', 'is', 'the', '3rd', 'line', '?'],
# ['this', 'is', 'the', '4th', 'line'],
# ['this', 'is', 'the', '5th', 'line', '.']]
The reason why you are not getting the first line is because you do .readline()
outside loop and never used it. You immediately replace that with another .readline()
in the loop leaving you with lines from second position onwards.
You can use a list comprehension that iterates through lines splitting on space:
with open('test.txt') as f:
print([x.split() for x in f])
# [['This', 'is', 'the', '1st', 'line', '!'],
# ['This', 'is', 'the', '2nd', 'line', '.'],
# ['This', 'is', 'the', '3rd', 'line', '?'],
# ['This', 'is', 'the', '4th', 'line'],
# ['This', 'is', 'the', '5th', 'line', '.']]
To make all lower case:
print([x.lower().split() for x in f])
# [['this', 'is', 'the', '1st', 'line', '!'],
# ['this', 'is', 'the', '2nd', 'line', '.'],
# ['this', 'is', 'the', '3rd', 'line', '?'],
# ['this', 'is', 'the', '4th', 'line'],
# ['this', 'is', 'the', '5th', 'line', '.']]
The reason why you are not getting the first line is because you do .readline()
outside loop and never used it. You immediately replace that with another .readline()
in the loop leaving you with lines from second position onwards.
edited Nov 26 '18 at 19:11
answered Nov 26 '18 at 18:50
AustinAustin
10.9k3828
10.9k3828
Oh wow! This works perfectly! Thank you so much. I still don't get why the first line was missing?!
– Glupan123
Nov 26 '18 at 18:53
@Glupan123, Please find the explanation.
– Austin
Nov 26 '18 at 18:58
1
Thank you so much! Works like a charm.
– Glupan123
Nov 26 '18 at 19:10
add a comment |
Oh wow! This works perfectly! Thank you so much. I still don't get why the first line was missing?!
– Glupan123
Nov 26 '18 at 18:53
@Glupan123, Please find the explanation.
– Austin
Nov 26 '18 at 18:58
1
Thank you so much! Works like a charm.
– Glupan123
Nov 26 '18 at 19:10
Oh wow! This works perfectly! Thank you so much. I still don't get why the first line was missing?!
– Glupan123
Nov 26 '18 at 18:53
Oh wow! This works perfectly! Thank you so much. I still don't get why the first line was missing?!
– Glupan123
Nov 26 '18 at 18:53
@Glupan123, Please find the explanation.
– Austin
Nov 26 '18 at 18:58
@Glupan123, Please find the explanation.
– Austin
Nov 26 '18 at 18:58
1
1
Thank you so much! Works like a charm.
– Glupan123
Nov 26 '18 at 19:10
Thank you so much! Works like a charm.
– Glupan123
Nov 26 '18 at 19:10
add a comment |
You're discarding the value returned by the first readline()
, which is why the first line of your file is missing in the output. You can iterate over the file object as an iterator instead:
joined =
for line in f:
joined.append(line.split())
print(joined)
Thank you for this clarification... I did not know that the first "readline()" also removes the first line in the output.
– Glupan123
Nov 26 '18 at 19:03
add a comment |
You're discarding the value returned by the first readline()
, which is why the first line of your file is missing in the output. You can iterate over the file object as an iterator instead:
joined =
for line in f:
joined.append(line.split())
print(joined)
Thank you for this clarification... I did not know that the first "readline()" also removes the first line in the output.
– Glupan123
Nov 26 '18 at 19:03
add a comment |
You're discarding the value returned by the first readline()
, which is why the first line of your file is missing in the output. You can iterate over the file object as an iterator instead:
joined =
for line in f:
joined.append(line.split())
print(joined)
You're discarding the value returned by the first readline()
, which is why the first line of your file is missing in the output. You can iterate over the file object as an iterator instead:
joined =
for line in f:
joined.append(line.split())
print(joined)
edited Nov 26 '18 at 18:54
answered Nov 26 '18 at 18:48
blhsingblhsing
33.3k41437
33.3k41437
Thank you for this clarification... I did not know that the first "readline()" also removes the first line in the output.
– Glupan123
Nov 26 '18 at 19:03
add a comment |
Thank you for this clarification... I did not know that the first "readline()" also removes the first line in the output.
– Glupan123
Nov 26 '18 at 19:03
Thank you for this clarification... I did not know that the first "readline()" also removes the first line in the output.
– Glupan123
Nov 26 '18 at 19:03
Thank you for this clarification... I did not know that the first "readline()" also removes the first line in the output.
– Glupan123
Nov 26 '18 at 19:03
add a comment |
To answer your additional question how to lowercase all characters:
str.lower()
gives you the lowercase of a string. So to complete the above answer:
with open('test.txt') as f:
print([x.split().lower() for x in f])
This should do it.
Lists don't have.lower()
.
– Austin
Nov 26 '18 at 19:00
Thank you for this suggestion... but I get the following error: AttributeError: 'list' object has no attribute 'lower'
– Glupan123
Nov 26 '18 at 19:01
add a comment |
To answer your additional question how to lowercase all characters:
str.lower()
gives you the lowercase of a string. So to complete the above answer:
with open('test.txt') as f:
print([x.split().lower() for x in f])
This should do it.
Lists don't have.lower()
.
– Austin
Nov 26 '18 at 19:00
Thank you for this suggestion... but I get the following error: AttributeError: 'list' object has no attribute 'lower'
– Glupan123
Nov 26 '18 at 19:01
add a comment |
To answer your additional question how to lowercase all characters:
str.lower()
gives you the lowercase of a string. So to complete the above answer:
with open('test.txt') as f:
print([x.split().lower() for x in f])
This should do it.
To answer your additional question how to lowercase all characters:
str.lower()
gives you the lowercase of a string. So to complete the above answer:
with open('test.txt') as f:
print([x.split().lower() for x in f])
This should do it.
answered Nov 26 '18 at 18:55
SilvanSilvan
537
537
Lists don't have.lower()
.
– Austin
Nov 26 '18 at 19:00
Thank you for this suggestion... but I get the following error: AttributeError: 'list' object has no attribute 'lower'
– Glupan123
Nov 26 '18 at 19:01
add a comment |
Lists don't have.lower()
.
– Austin
Nov 26 '18 at 19:00
Thank you for this suggestion... but I get the following error: AttributeError: 'list' object has no attribute 'lower'
– Glupan123
Nov 26 '18 at 19:01
Lists don't have
.lower()
.– Austin
Nov 26 '18 at 19:00
Lists don't have
.lower()
.– Austin
Nov 26 '18 at 19:00
Thank you for this suggestion... but I get the following error: AttributeError: 'list' object has no attribute 'lower'
– Glupan123
Nov 26 '18 at 19:01
Thank you for this suggestion... but I get the following error: AttributeError: 'list' object has no attribute 'lower'
– Glupan123
Nov 26 '18 at 19:01
add a comment |
There are a couple issues here. The first is that the first line is not appended to your joined
list because it is defined and then overwritten at the beginning of the while
loop on the first iteration before it can be appended to the joined
list.
The second is that you write:
for x in line:
joined.append(line)
Which adds the whole line
to joined
for each element in line
. So the second lines gets appended 6 times because it contains 6 elements. I think you meant to append x
to joined
, but that will give you all the words in a single list rather than nested lists as desired. Since each line is already split into a list of individual words, there is no need for this inner loop.
You can write your code more concisely with:
with open("test.txt", "r") as f:
joined = [line.split() for line in f.readlines()]
Result:
[['This', 'is', 'the', '1st', 'line', '!'], ['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '4th', 'line'], ['This', 'is', 'the', '5th', 'line', '.']]
Thank you Sir for this great clarification. Now the duplicates make sense.
– Glupan123
Nov 26 '18 at 18:55
add a comment |
There are a couple issues here. The first is that the first line is not appended to your joined
list because it is defined and then overwritten at the beginning of the while
loop on the first iteration before it can be appended to the joined
list.
The second is that you write:
for x in line:
joined.append(line)
Which adds the whole line
to joined
for each element in line
. So the second lines gets appended 6 times because it contains 6 elements. I think you meant to append x
to joined
, but that will give you all the words in a single list rather than nested lists as desired. Since each line is already split into a list of individual words, there is no need for this inner loop.
You can write your code more concisely with:
with open("test.txt", "r") as f:
joined = [line.split() for line in f.readlines()]
Result:
[['This', 'is', 'the', '1st', 'line', '!'], ['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '4th', 'line'], ['This', 'is', 'the', '5th', 'line', '.']]
Thank you Sir for this great clarification. Now the duplicates make sense.
– Glupan123
Nov 26 '18 at 18:55
add a comment |
There are a couple issues here. The first is that the first line is not appended to your joined
list because it is defined and then overwritten at the beginning of the while
loop on the first iteration before it can be appended to the joined
list.
The second is that you write:
for x in line:
joined.append(line)
Which adds the whole line
to joined
for each element in line
. So the second lines gets appended 6 times because it contains 6 elements. I think you meant to append x
to joined
, but that will give you all the words in a single list rather than nested lists as desired. Since each line is already split into a list of individual words, there is no need for this inner loop.
You can write your code more concisely with:
with open("test.txt", "r") as f:
joined = [line.split() for line in f.readlines()]
Result:
[['This', 'is', 'the', '1st', 'line', '!'], ['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '4th', 'line'], ['This', 'is', 'the', '5th', 'line', '.']]
There are a couple issues here. The first is that the first line is not appended to your joined
list because it is defined and then overwritten at the beginning of the while
loop on the first iteration before it can be appended to the joined
list.
The second is that you write:
for x in line:
joined.append(line)
Which adds the whole line
to joined
for each element in line
. So the second lines gets appended 6 times because it contains 6 elements. I think you meant to append x
to joined
, but that will give you all the words in a single list rather than nested lists as desired. Since each line is already split into a list of individual words, there is no need for this inner loop.
You can write your code more concisely with:
with open("test.txt", "r") as f:
joined = [line.split() for line in f.readlines()]
Result:
[['This', 'is', 'the', '1st', 'line', '!'], ['This', 'is', 'the', '2nd', 'line', '.'], ['This', 'is', 'the', '3rd', 'line', '?'], ['This', 'is', 'the', '4th', 'line'], ['This', 'is', 'the', '5th', 'line', '.']]
edited Nov 26 '18 at 18:58
answered Nov 26 '18 at 18:52
Henry WoodyHenry Woody
4,3773924
4,3773924
Thank you Sir for this great clarification. Now the duplicates make sense.
– Glupan123
Nov 26 '18 at 18:55
add a comment |
Thank you Sir for this great clarification. Now the duplicates make sense.
– Glupan123
Nov 26 '18 at 18:55
Thank you Sir for this great clarification. Now the duplicates make sense.
– Glupan123
Nov 26 '18 at 18:55
Thank you Sir for this great clarification. Now the duplicates make sense.
– Glupan123
Nov 26 '18 at 18:55
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53487168%2ffirst-line-fails-to-load-from-text-file-in-python%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Is it just me, but I cannot load the first line of the text file?!
– Glupan123
Nov 26 '18 at 18:52