【发布时间】:2019-03-30 16:18:04
【问题描述】:
我对一般编程很陌生,观看 CTF 视频启发了我开始使用 python 并很好地掌握了命令行(我在 OSX 顺便说一句)。
过去我在学校使用 anaconda 的 spyder 环境(Python 2.7)。
当我设置 brew、pip 和 python 时,我意识到我有一堆来自 Anaconda 的包,用于 pip 上的 2.7,但没有用于 pip3 上的 3.6。
我决定pip list 并得到一张为我安装的所有(许多)包 anaconda 的表格。
这就是你得到的:
Package Version
---------------------------------- -----------------------
alabaster 0.7.10
anaconda-client 1.6.5
anaconda-navigator 1.6.8
anaconda-project 0.8.0
appnope 0.1.0
appscript 1.0.1
asn1crypto 0.22.0
astroid 1.5.3
astropy 2.0.2
Babel 2.5.0
backports-abc 0.5
backports.functools-lru-cache 1.4
backports.shutil-get-terminal-size 1.0.0
backports.ssl-match-hostname 3.5.0.1
beautifulsoup4 4.6.0
bitarray 0.8.1
...
然后我就有了这个想法: 我可以将此文本转换为这种格式的字符串吗? “Package1 Package2 Package3 Package4”所以我可以 pip3 所有的包。 这变成了一个字符串操作挑战,因为我意识到仅 pip3 安装 150 多个软件包并更快地下载 anaconda 3.7 可能是无效的。(兼容性,无用,耗时...)
所以我首先在终端中使用“>”将列表提取到我制作的新文件中 然后我删除了终端中带有尾部功能的前两行。 我可以用 python 做什么我尝试了很多东西,但它从来没有奏效,发现这扼杀了调试/思考的所有动力。
tail -n +2 "$FILE" > "$FILE.tmp" && mv "$FILE.tmp" "$FILE"
之后,我制作了这个简单的 python 脚本,通过删除所有版本并将它们变成一个字符串来转换为我正在寻找的格式。
with open("file.txt","r+") as f:
lines=f.readlines()
new_string=''
for i in range(len(lines)):
lines[i]=lines[i].split(" ", 1)
del lines[i][1]
new_string += lines[i][0] + ' '
print new_string
如果我可以在终端窗口中做任何事情,或者为什么我的 python 脚本不好,请告诉我。
我的 for 循环 IMO 似乎与 i 有点奇怪,而 lines[i][0] 是丑陋的 IMO,因为你不自然地理解它的含义。
任何帮助或不同的方法将不胜感激。 非常感谢。
**TLDR: 任何见解:
1)用python或终端删除txt文件前n行的简单方法
2)为什么我的 Python 代码很丑,有终端等价物吗?**
【问题讨论】: