windos文件在linux出现乱码问题 python linux命令 编码

本文从WordPress迁移而来, 查看全部WordPress迁移文章

问题是这样的,需要将以前在windows写的文件放到linux下面,但是打开发现里面有乱码

第一反应是用python来解决,在搜索的过程中,学到了一个新的linux命令,能解决这个问题

最后,顺便学习了一下python常用的 文件夹,文件操作

一· decode和encode

简单来说就是,如果你将A类型编码的文件转成B类型编码的文件,那么就string.decode(“A”).encode(“B”)

二·

这样是解决一个文件,如果现在有一个目录,里面很多文件,还有一些子目录,子目录里面还有文件,需要将整个目录下面所有的文件,都做这样的事情要怎么办

  1. 怎么得到一个目录下面的 文件 , 目录?
  2. 得到一个目录名,怎么进入?

只要解决这两个问题,就可以递归地打开一个目录下面的所有子目录了

三· import os

里面有很多东西可以操作 目录和文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#-*- coding:utf-8 -*-
import os

#改变当前所在目录,作用跟命令cd一样
os.chdir("/home/g-rated/test")

#得到当前路径,没有执行chdir的话,默认路径就是py源文件所在路径
cwd = os.getcwd()
print cwd
"""
输出:
/home/g-rated/test
"""


#找出当前路径下面的所有文件夹和文件,但不是递归,即深度就是一层
#另外注意输出,输出的不是完整路径,而是相对路径
List = os.listdir(cwd)
for name in List:
print name
"""
输出:
cpp
python
a.txt
b.txt
"""


# os.path.exists(path) 判断是否存在这个路径
# os.path.isfile(path) , os.path.isdir(path)
#分别判断所给路径是否为文件,文件夹
#path可以是绝对路径,也可以是相对路径(相对cwdi)
print os.path.exists("/home/g-rated/main.txt")
print os.path.exists("/home/g-rated/main.cpp")
"""
输出:
True
False
"""
Dir = []
File = []
for name in List:
if os.path.isfile(name):
File.append(name)
elif os.path.isdir(name):
Dir.append(name)
print Dir
print File
"""
输出:
/home/g-rated main.py
/home/g-rated/main .py
"""



#路径分解
# os.path.split(path) 分解为 目录名 , 文件名
# os.path.splitext(path) 分解为 目录+文件名 , 后缀名
# os.path.dirname(path) , os.path.basename(path)
# 跟 split 的效果一样,得到目录名 ,文件名
# split , splitext , dirname , basename
# 路径可以是文件,或者是文件夹
# 如果是文件夹,splitext的效果可以说是没什么意义的
a , b = os.path.split("/home/g-rated/main.py")
print a , b
a , b = os.path.splitext("/home/g-rated/main.py")
print a , b
a , b = os.path.split("/home/g-rated/test")
print a , b
a , b = os.path.splitext("/home/g-rated/test")
print a , b
print '\n'
print os.path.dirname("/home/g-rated/main.py")
print os.path.basename("/home/g-rated/test/main.py")
print os.path.dirname("/home/g-rated/test")
print os.path.basename("/home/g-rated/test")
"""
输出:
/home/g-rated main.py
/home/g-rated/main .py
/home/g-rated test
/home/g-rated/test


/home/g-rated
main.py
/home/g-rated
test
"""

#创建和删除一个目录
# os.makedirs(path)
# os.rmdir(path)
os.makedirs("new_dir")
print os.path.exists("new_dir")
os.rmdir("new_dir")
print os.path.exists("new_dir")
"""
输出:
True
False
"""

# open 可用于创建一个文件(如果该文件不存在的话)
# 也可以 os.mknod(filename) 创建一个空文件
# 一般而言,创建一个新文件,都会往里面写东西,所以直接用 f = open(path,"w")
# os.remove(path) 可用于删除一个文件

os.mknod("empty.txt")
print os.path.exists("empty.txt")
os.remove("empty.txt")
print os.path.exists("empty.txt")

open("new_file","w")
print os.path.exists("new_file")
os.remove("new_file")
print os.path.exists("new_file")
"""
输出:
True
False
True
False
"""

# 文件重命名
open("nf.txt","w")
os.rename("nf.txt","NEW_FILE.txt")
print os.path.isfile("NEW_FILE.txt")
os.remove("NEW_FILE.txt")
"""
输出:
True
"""

# 获得文件的属性
print os.stat("a.txt")
"""
输出:
posix.stat_result(st_mode=33204, st_ino=657033L, st_dev=2055L, st_nlink=1, st_uid=1000, st_gid=1000, st_size=0L, st_atime=1403605645, st_mtime=1403605498, st_ctime=1403605498)
"""