如何在Python中读取文件的每一行并将每一行存储为列表中的元素?
我想逐行读取文件,并将每行附加到列表的末尾.
在Python中,调用
temp = open(filename,'r').readlines()
Run Code Online (Sandbox Code Playgroud)
得到一个列表,其中每个元素都是文件中的一行.它有点愚蠢但仍然:readlines()
还为每个元素写了换行符,这是我不希望发生的.我怎么能避免呢?
所以我想要做的就是从.txt文件中取出一行txt,然后将字符分配给一个列表,然后创建列表中所有单独字符的列表.
所以列表清单.
目前,我已经尝试过:
fO = open(filename, 'rU')
fL = fO.readlines()
Run Code Online (Sandbox Code Playgroud)
这就是我的最爱.我不太清楚如何提取单个字符并将它们分配给新列表.
我想做的事情如下:
fL = 'FHFF HHXH XXXX HFHX'
Run Code Online (Sandbox Code Playgroud)
^^^所以我是从.txt文件得到的行.
然后把它变成这个:
['F', 'H', 'F', 'F', 'H', ...]
Run Code Online (Sandbox Code Playgroud)
^^^和那是新的列表,每个单独的字符都在它自己的上面.
我有一个问题是在文件夹中解析1000个文本文件(每个文件大约3000行,大小约400KB).我确实用readlines读过它们,
for filename in os.listdir (input_dir) :
if filename.endswith(".gz"):
f = gzip.open(file, 'rb')
else:
f = open(file, 'rb')
file_content = f.readlines()
f.close()
len_file = len(file_content)
while i < len_file:
line = file_content[i].split(delimiter)
... my logic ...
i += 1
Run Code Online (Sandbox Code Playgroud)
这对我输入的样本(50,100个文件)完全没问题.当我在整个输入上运行超过5K的文件时,所花费的时间远不及线性增量.我计划进行性能分析并进行Cprofile分析.当输入达到7K文件时,更多文件以指数方式增加并且达到更差的速率所花费的时间.
这是readlines的累计时间,第一个 - > 354个文件(来自输入的样本)和第二个 - > 7473个文件(整个输入)
ncalls tottime percall cumtime percall filename:lineno(function)
354 0.192 0.001 **0.192** 0.001 {method 'readlines' of 'file' objects}
7473 1329.380 0.178 **1329.380** 0.178 {method 'readlines' of 'file' objects}
Run Code Online (Sandbox Code Playgroud)
因此,我的代码所花费的时间不会随着输入的增加而线性缩放.我阅读了一些文档说明readlines()
,其中人们声称这readlines()
会将整个文件内容读入内存,因此与readline()
或相比通常消耗更多内存 …
我正在使用file.readline()查找特殊行,以只读模式浏览文本文件的Python文件指针.一旦找到该行,我想将文件指针传递给一个方法,该方法期望文件指针位于该readline的START位置(不在它之后).
我如何在文件指针上实质上撤消一个file.readline()操作?
我读过"潜入Python 3","readlines()方法现在返回一个迭代器,因此它与Python 2中的xreadlines()一样高效".见这里:http://diveintopython3.org/porting-code-to-python-3-with-2to3.html.我不确定这是真的,因为他们在这里没有提到它:http://docs.python.org/release/3.0.1/whatsnew/3.0.html.我该怎么检查?
我已将一个股票代码符号列表保存到文本文件中,如下所示:
MMM
ABT
ABBV
ANF
....
Run Code Online (Sandbox Code Playgroud)
然后我使用readlines将符号放入Python列表:
stocks = open(textfile).readlines()
Run Code Online (Sandbox Code Playgroud)
但是,当我查看其中的列表时,它包含我不想要的Windows行尾分隔符:
list: ['MMM\r\n', 'ABT\r\n', 'ABBV\r\n', 'ANF\r\n', 'ACE\r\n', 'ACN\r\n', 'ACT\r\n', 'ADBE\r\n', 'ADT\r\n', 'AMD\r\n', 'AES\r\n', .....
Run Code Online (Sandbox Code Playgroud)
有人可以建议删除这些不需要的字符的最简单方法吗?
所以,如果我有一个名为myList的列表,我用它len(myList)
来查找该列表中的元素数量.精细.但是如何在列表中找到列表的数量?
text = open("filetest.txt", "r")
myLines = text.readlines()
numLines=len(myLines)
print numLines
Run Code Online (Sandbox Code Playgroud)
上面使用的文本文件有3行4个元素,用逗号分隔.变量numLines打印为'4'而不是'3'.因此,len(myLines)
返回每个列表中的元素数量而不是列表列表的长度.
当我打印时,myLines[0]
我得到第一个列表,myLines[1]
第二个列表等.但是len(myLines)
没有显示列表的数量,这应该与"行数"相同.
我需要确定从文件中读取多少行.
如何在Python中创建包含文本的伪文件对象?我正在尝试为一个方法编写单元测试,该方法接收文件对象并通过readlines()
然后执行一些文本操作来检索文本.请注意我无法在文件系统上创建实际文件.该解决方案必须与Python 2.7.3兼容.
每次我执行我的Python脚本时,它似乎都挂在这一行:
lines = sys.stdin.readlines()
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能解决/避免这种情况?
编辑
这就是我正在做的事情lines
:
lines = sys.stdin.readlines()
updates = [line.split() for line in lines]
Run Code Online (Sandbox Code Playgroud)
编辑2
我从git hook运行这个脚本,所以在EOF周围有吗?
python ×10
readlines ×10
list ×2
file ×1
file-io ×1
hang ×1
iterator ×1
line-breaks ×1
memory ×1
performance ×1
python-2.6 ×1
python-2.7 ×1
python-3.x ×1
readline ×1
stdin ×1
string ×1